【发布时间】:2022-01-26 05:43:00
【问题描述】:
我想从 pandas 数据框中绘制一个条形图并有合理数量的 xticks。
我的数据框(数据)如下所示:
0 Channel Counts Energy [keV]
0 1 0 -0.02
0 2 0 0.01
0 3 0 0.04
...
2 2044 2 58.81
1 2045 1 58.83
[2048 rows x 4 columns]
我正在用 x = data["Energy [keV]"] 和 height = data["Counts"] 绘制条形图,无论我尝试什么,我都会得到:
- 所有带有标签的 2048 个能量值都变得一团糟
- 前 50 个(例如)能量值在 x 轴的开头混杂在一起
基本上,该图正在绘制条形的位置(使用能量值),当我尝试操纵刻度或添加一条垂直线时,它始终使用 0 到 2048 x 轴。
我得到的是:plot with jumbled values (too many ticks)
代码:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
tmp = {'Channel': np.arange(1, 2049, 1),'Energy [keV]': np.arange(1, 2049, 1),
'Counts': np.random.rand(2048)*1000}
data = pd.DataFrame(tmp)
data['Energy [keV]'] = -0.048 + 0.029*data['Channel']
fig4 = plt.figure(figsize=(16,8))
ax4 = fig4.add_subplot(1, 1, 1)
data.plot.bar(x = "Energy [keV]", y = "Counts", width=1, ax=ax4, align='center')
ax4.vlines(x=25.0, ymin = ylim_min, ymax = ylim_max, color = 'darkred')
我尝试了几种解决方案,包括将列转换为 numpy 数组、更改数据帧索引、xaxis.set_ticks、xaxis.set_major_formatter...但总是有问题。
我想要像 5.0、10.0、15.0 这样漂亮的圆形刻度,当我在 x=25.0 处创建 vline 时,它实际上的值是 25.0。在代码中,我创建了一个随机数,因此 sn-p 将更容易重新创建。
【问题讨论】:
-
您可以手动设置刻度线,也可以选择按能量对行进行分箱(基本上是创建直方图而不是条形图)。
标签: python pandas dataframe bar-chart