制作直方图/条形图

时间:2017-08-22 09:44:48

标签: python-3.x pandas numpy matplotlib

我有一个Pandas数据帧,其中包含6000到1到2500之间的值,我想创建一个显示预定x轴的图表,即[1,2,4,8,16,32,64,128,256,512,更多]和每个这些计数的一个标准,我一直在研究numpy.histogram,这个位不让我选择bin范围(它估计一个)同样适用于matplotlib。

我到目前为止尝试过的代码是,

plt.hist(df['cnt'],bins=[0,1,2,4,8,16,32,64,128,256,512])
plt.show()

np.histogram(df['cnt'])

绘制np数据,但我看起来并不像我想要的那样。

我希望我的问题有道理,否则我会尝试扩展。

EDIT 当我运行

plt.hist(df['cnt'],bins=[0,1,2,4,8,16,32,64,128,256,512])
plt.show()

我得到:

enter image description here

我想要的是什么:

enter image description here

使用数据分析直方图功能在Excel中制作第二个。我希望这可以更好地描述我想做的事情。

1 个答案:

答案 0 :(得分:1)

我认为你想在xaxis上使用base-2对数刻度。

您可以通过设置ax.set_xscale('log', basex=2)

来实现

然后,您还需要调整刻度线位置和格式,您可以使用ax.xaxis.set_major_locator(ticker.FixedLocator(bins))ax.xaxis.set_major_formatter(ticker.ScalarFormatter()

进行调整
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import numpy as np

fig, ax = plt.subplots(1)

# Some fake data
cnt = np.random.lognormal(0.5, 2.0, 6000)

# Define your bins
bins = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512]

# Plot the histogram
ax.hist(cnt, bins=bins)

# Set scale to base2 log
ax.set_xscale('log', basex=2)

# Set ticks and ticklabels using ticker
ax.xaxis.set_major_locator(ticker.FixedLocator(bins))
ax.xaxis.set_major_formatter(ticker.ScalarFormatter())

plt.show()

enter image description here