gpt4 book ai didi

python - Matplotlib 条形图 x Axis 下方的负值

转载 作者:行者123 更新时间:2023-12-03 16:02:53 34 4
gpt4 key购买 nike

我是使用 Matplotlib 的新手。
我正在尝试构建一个图表,其中的值也可以为负。
使用来自 matplotlib 的通用图形

import matplotlib.pyplot as plt; plt.rcdefaults()
import numpy as np
import matplotlib.pyplot as plt

objects = ('Python', 'C++', 'Java', 'Perl', 'Scala', 'Lisp')
y_pos = np.arange(len(objects))
performance = [10,8,6,-4,2,1]

plt.bar(y_pos, performance, align='center', alpha=0.5)
plt.xticks(y_pos, objects)
plt.ylabel('Usage')
plt.title('Programming language usage')

plt.show()

这产生

enter image description here

但是,我想使用 x Axis 作为 y=0 线而不是单独的 y=0。因此,对于任何负值,它会出现在 x Axis 下方,而对于正值,它会出现在 x Axis 上方。

它会以某种方式看起来像这样。

enter image description here

我设法摆脱了 y Axis 上的周围线条和值。需要知道如何使 x Axis 成为 y=0 线。

任何帮助,将不胜感激。

非常感谢你。

最佳答案

来自 here通过访问 Axis 对象并修改 spines 相当简单。 ,你只需要暴露Axes首先使用 plt.gca() 对象方法。

这里的缺点是获取 xticklabels 如何放置它们有点棘手,但这只是将相关文本放在 Axes 上的一种情况。然后对 xlabel 重复此操作.您可以随时尝试使用 labelpad plt.xlabel() 的论据但我并没有真正玩过这个。

import matplotlib.pyplot as plt 
plt.rcdefaults()
import numpy as np
import matplotlib.pyplot as plt

objects = ('Python', 'C++', 'Java', 'Perl', 'Scala', 'Lisp')
y_pos = np.arange(len(objects))
performance = [10,8,6,-4,2,1]

plt.bar(y_pos, performance, align='center', alpha=0.5)
# Get the axes object
ax = plt.gca()
# remove the existing ticklabels
ax.set_xticklabels([])
# remove the extra tick on the negative bar
ax.set_xticks([idx for (idx, x) in enumerate(performance) if x > 0])
ax.spines["bottom"].set_position(("data", 0))
ax.spines["top"].set_visible(False)
ax.spines["right"].set_visible(False)
# placing each of the x-axis labels individually
label_offset = 0.5
for language, (x_position, y_position) in zip(objects, enumerate(performance)):
if y_position > 0:
label_y = -label_offset
else:
label_y = y_position - label_offset
ax.text(x_position, label_y, language, ha="center", va="top")
# Placing the x-axis label, note the transformation into `Axes` co-ordinates
# previously data co-ordinates for the x ticklabels
ax.text(0.5, -0.05, "Usage", ha="center", va="top", transform=ax.transAxes)

plt.show()

结果:

bar plot output from code above

关于python - Matplotlib 条形图 x Axis 下方的负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60519582/

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