【发布时间】:2021-04-06 03:43:54
【问题描述】:
我有以下数据框,其中包含运行中的最佳设备,在几天内按 1 到 300 排名(1 是最好的,300 是最差的)(df 列)
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
我想自定义线图 (example found here),但在尝试修改提供的示例代码时遇到了一些麻烦:
import matplotlib.pyplot as plt
import numpy as np
def energy_rank(data, marker_width=0.1, 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=1, linestyle='dashed', color=color))
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
data = ranks.head(4).to_numpy() #ranks is the above dataframe
artists = []
for row, color in zip(data, ('red','blue','green','magenta')):
artists.extend(energy_rank(row, color=color))
fig, ax = plt.subplots()
ax.set_xticklabels(ranks.columns) # set X axis to be dataframe columns
ax.set_xticklabels(ax.get_xticklabels(), rotation=35, fontsize = 10)
for artist in artists:
ax.add_artist(artist)
ax.set_ybound([15,0])
ax.set_xbound([.5,8.5])
使用ax.set_xticklabels(ranks.columns) 时,出于某种原因,它仅绘制ranks 列中7 天中的5 天,专门删除第一个和最后一个值。我试图复制这些值,但这也不起作用。我最终得到了这个:
总的来说,我想知道是否可以进行 3 种自定义:
- 输入 X 轴上
ranks列中的所有日期 - 恢复 Y 轴。
ax.set_ybound([15,0])不工作。以 0 开头的图表会更有意义,因为 1 是最重要的排名 - 在最后一天将标签添加到每行的末尾(X 轴上的最后一个值)。我可以添加小窗口标签,但是当您绘制更多数据时,它通常会变得非常混乱,因此仅在每行末尾添加文本确实会让它看起来更干净
如果无法进行这些自定义,请告诉我,非常感谢任何帮助!提前谢谢!
【问题讨论】:
标签: python matplotlib data-visualization