Python 列线图定制
目前,我正试图绘制一个图表,显示运行中某些设备的等级,在几天内,等级从1到300(1是最好的,300是最差的)(df列)。我想做的是一个类似于以下的图表: 我得到的是: 我想让线倾斜,因为它是在第一个图形上,而不是垂直的,但我不知道如何。我找到了这个问题的第一张图的基础,并从那里开始编写代码,这就是我最终得到的:Python 列线图定制,python,matplotlib,Python,Matplotlib,目前,我正试图绘制一个图表,显示运行中某些设备的等级,在几天内,等级从1到300(1是最好的,300是最差的)(df列)。我想做的是一个类似于以下的图表: 我得到的是: 我想让线倾斜,因为它是在第一个图形上,而不是垂直的,但我不知道如何。我找到了这个问题的第一张图的基础,并从那里开始编写代码,这就是我最终得到的: import matplotlib.pyplot as plt import matplotlib.ticker as plticker import numpy as np d
import matplotlib.pyplot as plt
import matplotlib.ticker as plticker
import numpy as np
def energy_rank(data, marker_width=.5, color='blue'):
y_data = np.repeat(data, 2)
x_data = np.empty_like(y_data)
x_data[0::2] = np.arange(1, len(data)+1) - (marker_width/2)
x_data[1::2] = np.arange(1, len(data)+1) + (marker_width/2)
lines = []
lines.append(plt.Line2D(x_data, y_data, lw=0.8, linestyle='dashed', color=color,alpha=1,marker='.'))
for x in range(0,len(data)*2, 2):
lines.append(plt.Line2D(x_data[x:x+2], y_data[x:x+2], lw=2, linestyle='solid', color=color))
return lines
head = 8
dfPlot = vazio.sort_values(dia, ascending = True).head(head)
data = dfPlot.to_numpy()
colorsHEX=('#FE5815','#001A70','#2F5C22','#B01338','#00030D','#2DE1FC','#2E020C','#B81D8C')
artists = []
for row, color in zip(data, colorsHEX):
artists.extend(energy_rank(row, color=color))
eixoXDatas = pd.to_datetime(list(vazio.columns),format='%d/%m/%y').strftime('%d/%b')
fig, ax = plt.subplots()
plt.xticks(np.arange(len(vazio.columns)),
eixoXDatas,
rotation = 35,
fontsize = 14)
plt.yticks(fontsize = 14)
plt.xlabel('Dias', fontsize=18)
plt.ylabel('Ranking', fontsize=18)
fig = plt.gcf()
fig.set_size_inches(16, 8)
for artist in artists:
ax.add_artist(artist)
ax.set_ybound([0,15])
ax.set_ylim(ax.get_ylim()[::-1])
ax.set_xbound([-0.1,float(len(vazio.columns))+2.5])
plt.yticks(np.arange(1,16,step=1))
ax.grid(axis='y',alpha=0.5)
lastDay = vazio.sort_values(vazio.iloc[:,-1:].columns.values[0], ascending = True).iloc[:,-1:]
lastDay = lastDay.head(head)
for inverter, pos in lastDay.iterrows():
ax.annotate(inverter, xy =(plt.gca().get_xlim()[1]-2.4, pos), color=colorsHEX[int(pos)-1])
我尝试实现energy\u rank
函数,删除x\u数据上的+/-部分
,但最终只能得到带有点的斜线,而不是水平线。有谁能帮我解决一下,我如何画水平线,而不是垂直虚线,实现上面例子中的倾斜线
我认为这是垂直的,因为点在x记号的顶部变化。如果你观察第一张图片,水平条集中在每个x记号上,因此线条“有一些空间”倾斜
vazio
数据帧如下(包含每个设备的等级):
下面是对
能量等级
函数的一个调整,该函数创建水平线段及其连接。线条绘制部分的灵感来自。可以选择填充线条下方的区域
导入matplotlib.pyplot作为plt
从matplotlib.collections导入LineCollection
将numpy作为np导入
def能量等级(数据,标记宽度=.5,颜色='blue',ax=无,填充=假):
ax=ax或plt.gca()
y=数据
x=np.arange(1,len(数据)+1)
segments1=np.数组([x-标记宽度/2,y,x+标记宽度/2,y])。T.重塑(-1,2,2)
lc1=线条集合(分段1,颜色=颜色)
立法会一题:设定线宽(2)
立法会一题:设置"线型"("-")
行\u hor=ax.add\u集合(lc1)
segments2=np.数组([x[:-1]+标记宽度/2,y[:-1],x[1:]-标记宽度/2,y[1:])。T.重塑(-1,2,2)
lc2=线条集合(分段2,颜色=颜色)
立法会二题:设定线宽(0.5)
lc2.设置线条样式('--')
lines\u connect=ax.add\u集合(lc2)
如果填写:
(段1.整形(-1,2)[:,0],段1.整形(-1,2)[:,1],
颜色=颜色,α=0.05)
回油管,油管连接
图,ax=plt.子批次()
M、 N=5,25
y=np.随机.均匀(-2,2,(M,N)).累积和(轴=1)
y+=np.随机.均匀(0.5,2,(M,1))-y.min(轴=1,keepdims=True)
colorsHEX=(“#FE5815”、“#001A70”、“#2F5C22”、“#B01338”、“#00030D”)
对于彝族,拉链颜色(y,colorsHEX):
能量等级(yi,ax=ax,color=color)
ax.set_xlim(0,N+1)
ax.set_ylim(0,y.max()+1)
plt.show()
Equipment 21-03-27 21-03-28 21-03-29 21-03-30 21-03-31 21-04-01 21-04-02
P01-INV-1-1 1 1 1 1 1 2 2
P01-INV-1-2 2 2 4 4 5 1 1
P01-INV-1-3 4 4 3 5 6 10 10