python - 通过在开头添加 0 并在最后添加变量值来重新排列步骤图
问题描述
我正在使用 Tkinter、ElementTree、Numpy、Pandas 和 Matplotlib 模块在 Python 中开发这个项目:
# Function to extract the Name and Value attributes
def extract_name_value(signals_df, rootXML):
# print(signals_df)
names_list = [name for name in signals_df['Name'].unique()]
num_names_list = len(names_list)
num_axisx = len(signals_df["Name"])
values_list = [value for pos, value in enumerate(signals_df["Value"])]
print(values_list)
points_axisy = signals_df["Value"]
print(len(points_axisy))
colors = ['b', 'g', 'r', 'c', 'm', 'y']
# Creation Graphic
fig, ax = plt.subplots(nrows=num_names_list, figsize=(20, 30), sharex=True)
plt.suptitle(f'File XML: {rootXML}', fontsize=16, fontweight='bold', color='SteelBlue', position=(0.75, 0.95))
plt.xticks(np.arange(-1, num_axisx), color='SteelBlue', fontweight='bold')
i = 1
for pos, name in enumerate(names_list):
# get data
data = signals_df[signals_df["Name"] == name]["Value"]
print(data)
# get color
j = random.randint(0, len(colors) - 1)
# get plots by index = pos
ax[pos].plot(data.index, data, drawstyle='steps-post', marker='o', color=colors[j], linewidth=3)
ax[pos].set_ylabel(name, fontsize=8, fontweight='bold', color='SteelBlue', rotation=30, labelpad=35)
ax[pos].yaxis.set_major_formatter(ticker.FormatStrFormatter('%0.1f'))
ax[pos].yaxis.set_tick_params(labelsize=6)
ax[pos].grid(alpha=0.4)
i += 1
# plt.show()
但我想让 y 轴值在所有 subplots () 情况下从 0 开始,并以 points_axisy 变量的大小或长度结束,并像我在下面分享的图表中一样绘制它:
也就是说,用黄色手绘的线条被图形的值替换,但我不明白该怎么做。我已经在使用 enumerate 函数测试代码,但找不到解决方案。测试我的代码的 xml 文件可以取自:xml 文件非常感谢您的帮助,任何评论都有帮助。
解决方案
根据黄色标记:
x
应向左扩展至 -1 并向右扩展至 27 (len(signals_df) - 1
)y
左边应该是 0 并继续data
右边的最后一个值 (data.iloc[-1]
)
您可以使用以下命令将这些值作为 numpy 数组添加/附加hstack()
:
x = np.hstack([-1, data.index.values, len(signals_df) - 1])
y = np.hstack([0, data.values, data.iloc[-1]])
ax[pos].plot(x, y, drawstyle='steps-post', marker='o', color=colors[j], linewidth=3)
或作为列表:
x = [-1] + data.index.tolist() + [len(signals_df) - 1]
y = [0] + data.tolist() + [data.iloc[-1]]
ax[pos].plot(x, y, drawstyle='steps-post', marker='o', color=colors[j], linewidth=3)
推荐阅读
- r - R中使用预定义名称列表的数据框子集
- javascript - 如何通过单击按钮使用javascript函数从html中删除元素
- ember.js - ember install ember-modifier-manager-polyfill 错误:RangeError:超出最大调用堆栈大小
- python-3.x - 简单单位矩阵函数
- node.js - Mongoose,Supertest:测试运行完成后一秒 Jest 没有退出
- java - 在 Visual Studio 2019 C++ 中创建 dll 的问题
- .net - 为什么 [regex] match() 和 -match 不同?
- r - R中具有多个周期的EMA
- java - setText() 在两个文本字段中,具体取决于单击用户的位置
- c++ - 挂钩加载的 dll (Vs C++)