Xticks装箱数据的频率

2024-06-16 09:59:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题很简单,可能有一个非常简单的方法来解决这个问题,但我找不到

我正在绘制一个熊猫系列,其格式如下(请注意装箱数据):

                       0
index                   
(0.0, 1.0]     -0.001563
(1.0, 2.0]     -0.014911
(2.0, 3.0]     -0.007187
(3.0, 4.0]     -0.003144
(4.0, 5.0]     -0.000145
(5.0, 6.0]      0.004209
(6.0, 7.0]      0.001705
(7.0, 8.0]     -0.000323
(8.0, 9.0]      0.000477

但是,当我尝试使用pd.Series.plot进行绘图(因此列0是y,索引是x)时,我只收到x轴上的几个点。我想为更频繁的垃圾箱设置刻度。然而,我还没有取得任何成功,因为索引现在是分类的,并且没有设置数字间隔的技巧

关于如何解决这个问题有什么建议吗

编辑 所以,我有下面的情节:

enter image description here

我想要的不是显示由绘图设置的标准XTICK,而是选择要显示的间隔。比方说,我不想显示每50个间隔的频率,而是想显示每15个间隔的频率


Tags: 数据方法绘图index间隔plot格式绘制
1条回答
网友
1楼 · 发布于 2024-06-16 09:59:36

这能解决你的问题吗?首先,将分类轴的记号设置为0,1,2,...。然后将索引用作标签。旋转有助于避免标签重叠

下面的示例有200个箱子,每15个位置设置一次记号。它还每3个位置添加一个小刻度(无标签)

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({'val': np.random.uniform(10,20,5000)})
cut = pd.cut(df['val'], bins=200).value_counts()
cut.plot(rot=90)
tickrange = range(0, len(cut), 15)
plt.xticks(tickrange, cut.index[tickrange])
plt.gca().set_xticks(range(0, len(cut), 3), minor=True)
plt.tight_layout()
plt.show()

example plot

如果对间隔进行了排序,则可以将间隔的开始(或中间)作为标签。例如:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({'val': np.concatenate([np.random.uniform(0, 360, 2000),
                                          np.random.normal(92, 3, 200),
                                          np.random.normal(255, 3, 200)])})
cut = pd.cut(df['val'], bins=range(361)).value_counts().sort_index()
cut.plot(rot=0)
tickrange = range(0, len(cut), 20)
# t.left: interval start, t.right: interval end, t.mid: interval center
ticklabels = [t.left for t in cut.index[tickrange]]
plt.xticks(tickrange, ticklabels)
plt.gca().set_xticks(range(0, len(cut), 5), minor=True)
plt.tight_layout()
plt.show()

sample with simpler ticks

相关问题 更多 >