为 matplotlib 图表设置背景颜色
Set background color to matplotlib chart
我正在使用 Matplotlib 生成订单簿图表,该图表已生成,但我很难弄清楚如何为其设置背景颜色。在图表上,我为每一侧绘制了 2 个订单簿,为此我在我的数据上使用了一个简单的循环:
fig = plt.figure(facecolor='#131722',dpi=135, figsize=(5, 3))
ax1 = plt.subplot2grid((2,1), (0,0), rowspan=6, colspan=4, facecolor='#131722')
Colors = [['#2BBB2B', '#FF0000'], ['#09ff00', '#ff8c00']]
for x in List:
Index = List.index(x)
print(Index)
rate_buy = []
total_buy = []
rate_sell = []
total_sell = []
for y in x['data']['asks']:
rate_sell.append(y[0])
total_sell.append(y[1])
for y in x['data']['bids']:
rate_buy.append(y[0])
total_buy.append(y[1])
rBuys = pd.DataFrame({'buy': rate_buy})
rSells = pd.DataFrame({'sell': rate_sell})
tBuys = pd.DataFrame({'total': total_buy})
tSells = pd.DataFrame({'total': total_sell})
plt.plot(rBuys.buy, tBuys.total, color=Colors[Index][0], linewidth=0.9, alpha=0.9)
plt.plot(rSells.sell, tSells.total, color=Colors[Index][1],alpha=0.3, linewidth=0.9)
输出如下:
基本上,我想做的是在图表内部设置与值 Color
颜色相同的区域。我该怎么做?
您可以使用 np.vstack
函数创建区域的 x
和 y
坐标数组,然后通过 Polygon
函数绘制它,如下所示:
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Polygon
x = np.linspace(0, 10, 11)
y1 = np.array([4, 5, 6, 9, 11, 7, 6, 2, 4, 4, 5])
y2 = np.array([4, 3, 2, 1, 1, 6, 5, 7, 7, 6, 5])
# here I concatenate the x and y arrays for the border of the area
# two times x for back and forth
# y1 and y2 for the top and bottom part of the area
area = np.vstack((np.concatenate((x, x[::-1])),
np.concatenate((y1, y2[::-1])))).T
fig, ax = plt.subplots(1, 1, figsize = (8, 8))
ax.plot(x, y1, 'r-', lw = 2, label = 'y1')
ax.plot(x, y2, 'b-', lw = 2, label = 'y2')
# here I add the area to the plot
ax.add_patch(Polygon(area, facecolor = 'g', alpha = 0.5))
ax.grid()
ax.legend()
plt.show()
这给你这个:
在你的图表中有 4 条曲线,我称之为浅绿色、深绿色、红色和棕色。
如果你想给图表中浅绿色和深绿色之间的部分着色,你应该按以下方式填写 vstack
向量:
area_1 = np.vstack((np.concatenate((x_of_light-green, x_of_dark-green[::-1])),
np.concatenate((y_of_light-green, y_of_dark-green[::-1])))).T
为了反转元素的顺序,数组后的 [::-1]
是必需的:使用 x_of_light-green
和 y_of_light-green
定义第四个(彩色的底部边框区域),而使用 x_of_dark-green[::-1]
和 y_of_dark-green[::-1]
定义背面(彩色区域的顶部边框)。
而对于红色和棕色曲线之间的区域:
area_2 = np.vstack((np.concatenate((x_of_red, x_of_brown[::-1])),
np.concatenate((y_of_red, y_of_brown[::-1])))).T
将 x_of_...
和 y_of_...
替换为您正在考虑的数据帧的数据。
定义这些区域后,您可以使用 ax1.add_path(Polygon(area_1))
和 ax1.add_path(Polygon(area_2))
将它们添加到图表中。
我正在使用 Matplotlib 生成订单簿图表,该图表已生成,但我很难弄清楚如何为其设置背景颜色。在图表上,我为每一侧绘制了 2 个订单簿,为此我在我的数据上使用了一个简单的循环:
fig = plt.figure(facecolor='#131722',dpi=135, figsize=(5, 3))
ax1 = plt.subplot2grid((2,1), (0,0), rowspan=6, colspan=4, facecolor='#131722')
Colors = [['#2BBB2B', '#FF0000'], ['#09ff00', '#ff8c00']]
for x in List:
Index = List.index(x)
print(Index)
rate_buy = []
total_buy = []
rate_sell = []
total_sell = []
for y in x['data']['asks']:
rate_sell.append(y[0])
total_sell.append(y[1])
for y in x['data']['bids']:
rate_buy.append(y[0])
total_buy.append(y[1])
rBuys = pd.DataFrame({'buy': rate_buy})
rSells = pd.DataFrame({'sell': rate_sell})
tBuys = pd.DataFrame({'total': total_buy})
tSells = pd.DataFrame({'total': total_sell})
plt.plot(rBuys.buy, tBuys.total, color=Colors[Index][0], linewidth=0.9, alpha=0.9)
plt.plot(rSells.sell, tSells.total, color=Colors[Index][1],alpha=0.3, linewidth=0.9)
输出如下:
基本上,我想做的是在图表内部设置与值 Color
颜色相同的区域。我该怎么做?
您可以使用 np.vstack
函数创建区域的 x
和 y
坐标数组,然后通过 Polygon
函数绘制它,如下所示:
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Polygon
x = np.linspace(0, 10, 11)
y1 = np.array([4, 5, 6, 9, 11, 7, 6, 2, 4, 4, 5])
y2 = np.array([4, 3, 2, 1, 1, 6, 5, 7, 7, 6, 5])
# here I concatenate the x and y arrays for the border of the area
# two times x for back and forth
# y1 and y2 for the top and bottom part of the area
area = np.vstack((np.concatenate((x, x[::-1])),
np.concatenate((y1, y2[::-1])))).T
fig, ax = plt.subplots(1, 1, figsize = (8, 8))
ax.plot(x, y1, 'r-', lw = 2, label = 'y1')
ax.plot(x, y2, 'b-', lw = 2, label = 'y2')
# here I add the area to the plot
ax.add_patch(Polygon(area, facecolor = 'g', alpha = 0.5))
ax.grid()
ax.legend()
plt.show()
这给你这个:
在你的图表中有 4 条曲线,我称之为浅绿色、深绿色、红色和棕色。
如果你想给图表中浅绿色和深绿色之间的部分着色,你应该按以下方式填写 vstack
向量:
area_1 = np.vstack((np.concatenate((x_of_light-green, x_of_dark-green[::-1])),
np.concatenate((y_of_light-green, y_of_dark-green[::-1])))).T
为了反转元素的顺序,数组后的 [::-1]
是必需的:使用 x_of_light-green
和 y_of_light-green
定义第四个(彩色的底部边框区域),而使用 x_of_dark-green[::-1]
和 y_of_dark-green[::-1]
定义背面(彩色区域的顶部边框)。
而对于红色和棕色曲线之间的区域:
area_2 = np.vstack((np.concatenate((x_of_red, x_of_brown[::-1])),
np.concatenate((y_of_red, y_of_brown[::-1])))).T
将 x_of_...
和 y_of_...
替换为您正在考虑的数据帧的数据。
定义这些区域后,您可以使用 ax1.add_path(Polygon(area_1))
和 ax1.add_path(Polygon(area_2))
将它们添加到图表中。