频率分布图:将xaxis更改为间隔

2024-04-26 23:40:36 发布

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

亲爱的互联网人民

我已经计算了频率分布,现在我想以某种方式绘制它。到目前为止,我已经计算并绘制了频率分布图,但我找不到我正在寻找的最终产品的解决方案。我现在的示例数据集代码是:

import matplotlib.pyplot as plt
from scipy import stats
import numpy as np
import pandas as pd

# example data
rng = np.random.RandomState(seed=12345)
a1 = stats.norm.rvs(size=1000, random_state=rng)
res = stats.relfreq(a1, numbins=34)
x = res.lowerlimit + np.linspace(0, res.binsize*res.frequency.size, res.frequency.size)

# plotting
fig = plt.figure(figsize=(6, 3))
ax = fig.add_subplot(1, 1, 1)
ax.bar(x, res.frequency, width=res.binsize)
ax.set_title('Frequency Distribution of 1D Vix Returns')
ax.set_xlim([x.min(), x.max()])
ax.set_xticks(ax.get_xticks()[::1])
plt.show()

作为最后一步,我想绘制x轴,就像附件中的图片一样。我想要的不是单个数字,而是间隔。我找不到解决这件事的消息来源。有没有人遇到过同样的问题,或者知道有解决问题的方法?提前谢谢

enter image description here


Tags: importsizea1asstatsnp绘制res
1条回答
网友
1楼 · 发布于 2024-04-26 23:40:36

看看这个漂亮的答案: https://stackoverflow.com/a/6353051/10372616

我将代码添加到当前绘图中

import matplotlib.pyplot as plt
from scipy import stats # ????
import numpy as np
import pandas as pd # ????

# example data
rng = np.random.RandomState(seed=12345)
a1 = stats.norm.rvs(size=1000, random_state=rng)
res = stats.relfreq(a1, numbins=34)
x = res.lowerlimit + np.linspace(0, res.binsize*res.frequency.size, res.frequency.size)

# plotting
fig = plt.figure(figsize=(6, 3))
ax = fig.add_subplot(1, 1, 1)
ax.bar(x, res.frequency, width=res.binsize)
ax.set_title('Frequency Distribution of 1D Vix Returns')
ax.set_xlim([x.min(), x.max()])
ax.set_xticks(ax.get_xticks()[::1])

# Change traditional tick labels to range labels
#                                 
ax.set_xticklabels([]) # hide your previous x tick labels
bins = ax.get_xticks()[::1]
bin_centers = 0.5 * np.diff(bins) + bins[:-1]
for a, b, x in zip(bins, bins[1:], bin_centers):
    label = '{:0.0f} to {:0.0f}'.format(a, b)
    ax.annotate(label, xy=(x, 0), xycoords=('data', 'axes fraction'),
        xytext=(0, -10), textcoords='offset points', va='top', ha='center', rotation=90)

plt.show()

之前: before

之后: after

相关问题 更多 >