我有以下带有饼图的子图,由下面的代码输出。
我想用不同的颜色为奇数子图的背景(仅上图中的中间阴影)着色,但是我无法使其工作。
我查看了几个地方,并从对this question的一些答案中尝试了ax.set_facecolor('red')
和ax.patch.set_facecolor('red')
,但都没有找到我想要的替代阴影/着色模式。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
n = 3
nums_df = pd.DataFrame([np.random.randint(1, 20, size=5) for _ in xrange(n)])
row_labels = ["row {:d}".format(i) for i in xrange(n)]
nums_df.index = row_labels
# create a figure with n subplots
fig, axes = plt.subplots(1, n)
# create pie charts
for i, ax in enumerate(axes):
ax.pie(nums_df.loc[row_labels[i]], labels=nums_df.loc[row_labels[i]])
ax.axis("equal")
if i%2 == 1:
ax.set_facecolor('red')
# ax.patch.set_facecolor('red')
plt.show()
最佳答案
默认情况下,饼图的完整轴为“ off”。您可以使用frame
参数将其设置为on。
ax.pie(..., frame=True)
这样会在轴上产生刻度和刻度标签,因此,最好在外部设置它,
ax.pie(..., frame=False)
ax.set_frame_on(True)
另外,您可能想拉起刺,
for _, spine in ax.spines.items():
spine.set_visible(False)
或者,在一行中
plt.setp(ax.spines.values(),visible=False)
最后,为使勾号标签不超过轴区域,可以固定轴范围,例如
ax.axis([-1,1,-1,1])
并使用较小的扇形半径,例如radius=.27
。完整的复制代码
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
n = 3
nums_df = pd.DataFrame([np.random.randint(1, 20, size=5) for _ in xrange(n)])
row_labels = ["row {:d}".format(i) for i in xrange(n)]
nums_df.index = row_labels
fig, axes = plt.subplots(1, n)
for i, ax in enumerate(axes):
ax.pie(nums_df.loc[row_labels[i]], labels=nums_df.loc[row_labels[i]], frame=False, radius=0.27)
ax.set_frame_on(True)
ax.axis("equal")
ax.axis([-1,1,-1,1])
plt.setp(ax.spines.values(),visible=False)
if i%2 == 1:
ax.set_facecolor('red')
plt.show()
关于python - 更改特定子图的背景颜色(饼图外部),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48958216/