![](/img/trans.png)
[英]I have a bar chart with error bars in matplotlib (python), but i want the error bars in the middle of the bar. how do i do this? Thanks
[英]How do I get all bars in a matplotlib bar chart?
通过调用get_lines()
函数可以轻松检索折线图中的所有线条。 我似乎无法找到一个条形图同等功能,即检索所有矩形实例在AxesSubplot
。 建议?
如果您想要所有条形,只需捕获绘图方法的输出。 它是一个包含栏的列表:
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
x = np.arange(5)
y = np.random.rand(5)
bars = ax.bar(x, y, color='grey')
bars[3].set_color('g')
如果您确实需要坐标区中的所有 Rectangle 对象,但这些对象可能不仅仅是条形,请使用:
bars = [rect for rect in ax.get_children() if isinstance(rect, mpl.patches.Rectangle)]
另一个可能对某些人有用的选项是访问ax.containers
。 你必须小心一点,因为如果你的情节包含其他类型的容器,你也会得到它们。 只获得酒吧容器之类的东西
from matplotlib.container import BarContainer
bars = [i for i in ax.containers if isinstance(i, BarContainer)]
这可以通过一些技巧非常强大(从公认的例子中获得灵感)。
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
x = np.arange(5)
y = np.random.rand(2, 5)
ax.bar(x, y[0], width=0.5)
ax.bar(x + 0.5, y[1], width=0.5)
for bar, color in zip(ax.containers, ("red", "green")):
# plt.setp sets a property on all elements of the container
plt.setp(bar, color=color)
会给你:
如果您在绘图中添加一些标签,您可以构建一个容器字典以通过标签访问它们
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
x = np.arange(5)
y = np.random.rand(2, 5)
ax.bar(x, y[0], width=0.5)
ax.bar(x + 0.5, y[1], width=0.5, label='my bars')
named_bars = {i.get_label(): i for i in ax.containers}
plt.setp(named_bars["my bars"], color="magenta")
会给你
当然,您仍然可以访问容器中的单个条形补丁,例如
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
x = np.arange(5)
y = np.random.rand(2, 5)
ax.bar(x, y[0], width=0.5)
ax.bar(x + 0.5, y[1], width=0.5)
plt.setp(ax.containers[0], color="black")
plt.setp(ax.containers[1], color="grey")
ax.containers[0][3].set_color("red")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.