假设我有一个列中有离散值的熊猫数据帧。
import pandas as pd
data = ['A']*2 + ['C']*3 + ['B']* 1
print(data)
# ['A', 'A', 'C', 'C', 'C', 'B']
my_df = pd.DataFrame({'mycolumn': data})
print(my_df)
# mycolumn
# 0 A
# 1 A
# 2 C
# 3 C
# 4 C
# 5 B
然后我创建一个直方图,显示这些值的频率。我使用Pandas内置函数hist(),它反过来又依赖于Matplotlib直方图函数。
my_df.mycolumn.hist()
现在,如何更改X轴上标签的顺序以获得特定的顺序?例如,我希望x轴具有特定顺序的标签:C、A、B,而不是如图所示的
A、C、B。
此外,如何将y轴更改为整数而不是浮点?频率值为离散计数。
您可以创建一个排序器,以便在打印之前对数据帧进行排序。对于整数,可以使用MaxNLocator:
import pandas as pd
from matplotlib.ticker import MaxNLocator
fig, ax = plt.subplots()
data = ['A']*2 + ['C']*3 + ['B']* 1
my_df = pd.DataFrame({'mycolumn': data})
sorter = dict([(k, v) for (v,k) in enumerate(['C', 'A', 'B'])])
(my_df.assign(sorter=my_df['mycolumn'].map(sorter))
.sort_values('sorter')['mycolumn'].value_counts().plot.bar(ax=ax))
ax.yaxis.set_major_locator(MaxNLocator(integer=True))
您可以使用value_counts
,loc
定义顺序,bar
绘制:
my_df.mycolumn.value_counts().loc[['C', 'A', 'B']].plot.bar()
在y轴上使用整数的解决方案:
from matplotlib.ticker import MaxNLocator
ax = my_df.mycolumn.value_counts().loc[['C', 'A', 'B']].plot.bar()
ax.yaxis.set_major_locator(MaxNLocator(integer=True))
我有一个从sql数据库查询派生的直方图。代码如下: 输出如下:https://gyazo.com/d73b20a118db0088aab261c079613b00 我想显示为:https://gyazo.com/063990cd8741682f45b5a37ba594ff56 其中,x轴的编号向右侧移动了一点。有可能做到这一点吗?
我想使用Matplotlib绘制一个带有非均匀x轴的直方图。例如,考虑下面的直方图: 第一个箱子的密度很高,所以我想放大。 理想情况下,我想将x轴中的值更改为,保持图中的箱宽度不变(当然不是数字)。有没有简单的方法来实现这一点?欢迎任何意见或建议。
我的Python脚本里有这个 它产生了一个像这样的图表 正如你所看到的,x标签被切断了,这不是我没有完全扩展图形,我已经尝试过了,它仍然被切断。我怎样才能在图表上得到整个标签? 谢啦
我已经想出了如何用以下代码片段(数周,放在xAxis中的代码)更改下面的工作日标签(T、W、T等): 现有示例:https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/gantt/demo/resource-management
我创建了一个图,它显示了一组数据和直方图。让我困扰的是,如下所示,直方图上的X轴有一个20步,因此最后一个值是140,而不是150,这严重触发了我的强迫症。有人能帮我修理它吗? 生成的png文件: https://i.stack.imgur.com/NhBYM.png 以及守则的有关部分: 非常感谢。
以下是postgres 9.1数据库的一些SQL示例: 这是我的python脚本: 有没有办法防止标签相互重叠?理想情况下是以自动方式,因为我无法预测棒的数量。