我是python的新手,对R的经验很少。
我有一个带有gut_list和百分比的数据框。我想创建带有标签的圆形barplot / race轨迹图。我在R ggplot中看到了一个帖子,用于创建与圣殿中心相似的内容。但是我不确定如何在python中使用ggplot。
我想要一个与以下R组类似的输出。但是我想尝试使用python包来创建带有标记值和图例的图。
Making a circular barplot with a hollow center (aka race track plot)
示例数据:
gut_list = ("Micro1", "Micro2", "Micro3", "Micro4", "Micro5", "Micro6")
percent = (2, 77, 22, 41, 21, 9)
初审:
import matplotlib.pyplot as plt
from matplotlib import cm
from math import log10
gut_list = ("Micro1", "Micro2", "Micro3", "Micro4", "Micro5", "Micro6")
percent = [2, 77, 22, 41, 21, 9]
#number of data points
n = len(percent)
#find max value for full ring
k = 10 ** int(log10(max(percent)))
m = k * (1 + max(percent) // k)
#radius of donut chart
r = 1.5
#calculate width of each ring
w = r / n
#create colors along a chosen colormap
colors = [cm.PuBu(i / n) for i in range(n)]
#create figure, axis
fig, ax = plt.subplots()
ax.axis("equal")
for i in range(n):
innerring, _ = ax.pie([m - percent[i], percent[i]], radius = r - i * w, startangle = 90, colors = ["white", colors[i]])
plt.setp(innerring, width = w, edgecolor = "lightgrey")
plt.legend()
plt.show()
我仍然没有设法添加标签或图例。
答案 0 :(得分:1)
下面是一些示例代码,用于创建这样的“同心圆图”(又名“同心圆环图”)。
主要思想是使用x
的{{1}}数组来指示要使用的圆数。并且一次只能放置一个pie
。 docs告诉我们,如果x
的总数小于1,则将其作为一个百分比(否则,将所有内容相加并与之成比例显示,这将使单个{{1 }} 100%)。 x
将在所需方向上形成弧。现在重新计算了单个x
,以使最大的弧线成为百分比列表中设置的百分比。
要注意的是,既需要外半径counterclock=False
,也需要内半径。在当前代码中,内半径仅在计算使每个圆偏移的x
步骤中起作用。
饼图可以在饼图本身上显示标签,但是在我们的情况下,自动放置可能会造成混淆。设置r
将使标签进入图例。设置width
将使其不显示在图表上。可以放置图例,使其图例的右上角在图表的顶部中心。当百分比过高并且弧线重叠时,将其放置在其他位置。
或者,文本可以直接显示在圆弧旁边。在data coordinates
中,圆圈的中心在labels=['desired label']
处。因此,labeldistance=None
在每个环的起始边缘的中心。文本右对齐并垂直居中。
0,0