gpt4 book ai didi

python - matplotlib 将 x 轴上的刻度线命名为 1、2、4、8、16 等

转载 作者:太空宇宙 更新时间:2023-11-03 12:40:32 27 4
gpt4 key购买 nike

使用与上一个问题相同的代码,此示例生成下图:

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

data = (0, 1890,865, 236, 6, 1, 2, 0 , 0, 0, 0 ,0 ,0 ,0, 0, 0)
ind = range(len(data))
width = 0.9 # the width of the bars: can also be len(x) sequence

p1 = plt.bar(ind, data, width)
plt.xlabel('Duration 2^x')
plt.ylabel('Count')
plt.title('DBFSwrite')
plt.axis([0, len(data), -1, max(data)])

ax = plt.gca()

ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.spines['left'].set_visible(False)
ax.spines['bottom'].set_visible(False)

plt.savefig('myfig')

Sample output

而不是刻度标签是 0、2、4、6、8...我宁愿在每个标记处都标记它们,并继续使用 2^x 的值:1、2、4、8, 16 等。我该怎么做?更好的是,我可以将标签置于条形下方的中心,而不是左侧边缘吗?

最佳答案

实现此目的的一种方法是使用 LocatorFormatter。这使得可以交互式地使用绘图而不会“丢失”刻度线。在这种情况下,我建议 MultipleLocatorFuncFormatter如下例所示。

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, FuncFormatter

data = (0, 1890,865, 236, 6, 1, 2, 0 , 0, 0, 0 ,0 ,0 ,0, 0, 0)
ind = range(len(data))
width = 0.9 # the width of the bars: can also be len(x) sequence

# Add `aling='center'` to center bars on ticks
p1 = plt.bar(ind, data, width, align='center')
plt.xlabel('Duration 2^x')
plt.ylabel('Count')
plt.title('DBFSwrite')
plt.axis([0, len(data), -1, max(data)])

ax = plt.gca()

# Place tickmarks at every multiple of 1, i.e. at any integer
ax.xaxis.set_major_locator(MultipleLocator(1))
# Format the ticklabel to be 2 raised to the power of `x`
ax.xaxis.set_major_formatter(FuncFormatter(lambda x, pos: int(2**x)))
# Make the axis labels rotated for easier reading
plt.gcf().autofmt_xdate()

ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.spines['left'].set_visible(False)
ax.spines['bottom'].set_visible(False)

plt.savefig('myfig')

enter image description here

关于python - matplotlib 将 x 轴上的刻度线命名为 1、2、4、8、16 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18496319/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com