在 matplotlib 的圆形部分中插入文本
insert text in the sections of circle in matplotlib
我想以圆形形式绘制一些热图。我正在使用 matplotlib 来执行此操作,我采用了此处给出的一些示例并将其修改为绘制我的。到目前为止,我能够得到圆圈并能够在圆圈的每个部分填充颜色。
现在,我想在每个部分中插入说明它是什么的文本。任何人都可以帮助我了解如何以圆形形式打印文本吗?
此外,由于我的值在 0.7-0.8 之间,所以我得到了灰色阴影,但差别很小。有什么方法可以放大我的颜色条,使差异更加突出?
这是我的代码:
from matplotlib.patches import Wedge
from pylab import *
import matplotlib.pyplot as plt
import numpy as np
import pylab
from matplotlib.projections import PolarAxes
labels = ['A1A2', 'B1B2', 'F1F2', 'P1P2'] #innerCircle
labels2 = ['A1P1', 'B1P1', 'F1P1', 'F1P1','A2P2', 'B2P2', 'F2P2','F2P2']#outecircle
I = [0.77147898831281592, 0.77754754203464382, 0.7730316051917463, 0.75265521526987844] #innerCircle
O = [0.82767052973376798, 0.77921788065668873, 0.82932467288645262, 0.82932467288645262,0.80286007268622095, 0.78757118956065952, 0.79434911322895663, 0.79434911322895663] #outecircle
newN = []
for i in O:
j = float(i)
newN.append(j*1000)
print newN
maxN = round(max(newN))
print maxN
fig = figure()
ax = fig.add_subplot(111, projection = 'polar')
subplot(111,projection='polar')
theta = arange(maxN)*2*pi/maxN
plot(theta,0.25*ones(maxN),'k')
plot(theta, 0.65*ones(maxN), 'k')
plot([0, 0],[0,0.65],'k')
plot([pi/4.,pi/4.],[0.25, 0.65], 'k')
plot([pi/2, pi/2.],[0, 0.65], 'k')
plot([3*pi/4.,3*pi/4],[0.25, 0.65], 'k')
plot([pi,pi],[0,0.65],'k')
plot([5*pi/4,5*pi/4],[0.25, 0.65], 'k')
plot([3*pi/2,3*pi/2],[0, 0.65], 'k')
plot([7*pi/4,7*pi/4],[0.25, 0.65], 'k')
ax.add_artist(Wedge((0.5,0.5), 0.325, 0,45, width=0.2, transform=ax.transAxes, color=str(O[0])))
ax.add_artist(Wedge((0.5,0.5), 0.325, 45,90, width=0.2, transform=ax.transAxes, color=str(O[1])))
ax.add_artist(Wedge((0.5,0.5), 0.325, 90,135, width=0.2, transform=ax.transAxes, color=str(O[2])))
ax.add_artist(Wedge((0.5,0.5), 0.325, 135,180, width=0.2, transform=ax.transAxes, color=str(O[3])))
ax.add_artist(Wedge((0.5,0.5), 0.325, 180,225, width=0.2, transform=ax.transAxes, color=str(O[4])))
ax.add_artist(Wedge((0.5,0.5), 0.325, 225,270, width=0.2, transform=ax.transAxes, color=str(O[5])))
ax.add_artist(Wedge((0.5,0.5), 0.325, 270,315, width=0.2, transform=ax.transAxes, color=str(O[6])))
ax.add_artist(Wedge((0.5,0.5), 0.325, 315,360, width=0.2, transform=ax.transAxes, color=str(O[7])))
ax.add_artist(Wedge((0.5,0.5), 0.125, 0,90, width=0.125, transform=ax.transAxes, color = str(I[0])))
ax.add_artist(Wedge((0.5,0.5), 0.125, 90,180, width=0.125, transform=ax.transAxes, color = str(I[1])))
ax.add_artist(Wedge((0.5,0.5), 0.125, 180,270, width=0.125, transform=ax.transAxes, color = str(I[2])))
ax.add_artist(Wedge((0.5,0.5), 0.125, 270,360, width=0.125, transform=ax.transAxes, color = str(I[3])))
ax.grid(False)
rgrids((1,1),('',''))
ax.set_theta_zero_location("N")
ax.set_theta_direction('clockwise')
show()
谢谢!
我想要这样的东西:
到目前为止我已经到达这里:
我还需要去掉外面的白圈和度数。
谢谢!
对于标签:
halfwedge = np.pi/8
for i in range(8):
ax.text(np.pi/2 - halfwedge*(2*i+1), 0.425, labels2[i])
for i in range(4):
ax.text(np.pi/2 - halfwedge*2*(2*i+1), 0.15, labels[i])
要掌握坐标系:
ax.text(0,0,'0,0 transAxes',transform=ax.transAxes)
ax.text(0,1,'0,1 transAxes',transform=ax.transAxes)
ax.text(.5,0,'.5,0 transAxes',transform=ax.transAxes)
ax.text(0,1,'0,1 transData', transform=ax.transData)
ax.text(0,0,'0,0 transData', transform=ax.transData)
ax.text(np.pi/2,1,'pi/2,1 transData', transform=ax.transData)
ax.text(np.pi,0.5,'pi,0.5 transData', transform=ax.transData)
ax.text(np.pi*3/2,1,'3pi/2,1 transData', transform=ax.transData)
而且您确实希望循环中所有这些 ax.add_artist 行,还有标签!
要关闭轴:
ax.spines['polar'].set_visible(False)
ax.xaxis.set_ticks([])
要使颜色更加鲜明,请查看颜色图——您可以设置数据的上限和下限以增加颜色的可能分布。
我想以圆形形式绘制一些热图。我正在使用 matplotlib 来执行此操作,我采用了此处给出的一些示例并将其修改为绘制我的。到目前为止,我能够得到圆圈并能够在圆圈的每个部分填充颜色。
现在,我想在每个部分中插入说明它是什么的文本。任何人都可以帮助我了解如何以圆形形式打印文本吗?
此外,由于我的值在 0.7-0.8 之间,所以我得到了灰色阴影,但差别很小。有什么方法可以放大我的颜色条,使差异更加突出?
这是我的代码:
from matplotlib.patches import Wedge
from pylab import *
import matplotlib.pyplot as plt
import numpy as np
import pylab
from matplotlib.projections import PolarAxes
labels = ['A1A2', 'B1B2', 'F1F2', 'P1P2'] #innerCircle
labels2 = ['A1P1', 'B1P1', 'F1P1', 'F1P1','A2P2', 'B2P2', 'F2P2','F2P2']#outecircle
I = [0.77147898831281592, 0.77754754203464382, 0.7730316051917463, 0.75265521526987844] #innerCircle
O = [0.82767052973376798, 0.77921788065668873, 0.82932467288645262, 0.82932467288645262,0.80286007268622095, 0.78757118956065952, 0.79434911322895663, 0.79434911322895663] #outecircle
newN = []
for i in O:
j = float(i)
newN.append(j*1000)
print newN
maxN = round(max(newN))
print maxN
fig = figure()
ax = fig.add_subplot(111, projection = 'polar')
subplot(111,projection='polar')
theta = arange(maxN)*2*pi/maxN
plot(theta,0.25*ones(maxN),'k')
plot(theta, 0.65*ones(maxN), 'k')
plot([0, 0],[0,0.65],'k')
plot([pi/4.,pi/4.],[0.25, 0.65], 'k')
plot([pi/2, pi/2.],[0, 0.65], 'k')
plot([3*pi/4.,3*pi/4],[0.25, 0.65], 'k')
plot([pi,pi],[0,0.65],'k')
plot([5*pi/4,5*pi/4],[0.25, 0.65], 'k')
plot([3*pi/2,3*pi/2],[0, 0.65], 'k')
plot([7*pi/4,7*pi/4],[0.25, 0.65], 'k')
ax.add_artist(Wedge((0.5,0.5), 0.325, 0,45, width=0.2, transform=ax.transAxes, color=str(O[0])))
ax.add_artist(Wedge((0.5,0.5), 0.325, 45,90, width=0.2, transform=ax.transAxes, color=str(O[1])))
ax.add_artist(Wedge((0.5,0.5), 0.325, 90,135, width=0.2, transform=ax.transAxes, color=str(O[2])))
ax.add_artist(Wedge((0.5,0.5), 0.325, 135,180, width=0.2, transform=ax.transAxes, color=str(O[3])))
ax.add_artist(Wedge((0.5,0.5), 0.325, 180,225, width=0.2, transform=ax.transAxes, color=str(O[4])))
ax.add_artist(Wedge((0.5,0.5), 0.325, 225,270, width=0.2, transform=ax.transAxes, color=str(O[5])))
ax.add_artist(Wedge((0.5,0.5), 0.325, 270,315, width=0.2, transform=ax.transAxes, color=str(O[6])))
ax.add_artist(Wedge((0.5,0.5), 0.325, 315,360, width=0.2, transform=ax.transAxes, color=str(O[7])))
ax.add_artist(Wedge((0.5,0.5), 0.125, 0,90, width=0.125, transform=ax.transAxes, color = str(I[0])))
ax.add_artist(Wedge((0.5,0.5), 0.125, 90,180, width=0.125, transform=ax.transAxes, color = str(I[1])))
ax.add_artist(Wedge((0.5,0.5), 0.125, 180,270, width=0.125, transform=ax.transAxes, color = str(I[2])))
ax.add_artist(Wedge((0.5,0.5), 0.125, 270,360, width=0.125, transform=ax.transAxes, color = str(I[3])))
ax.grid(False)
rgrids((1,1),('',''))
ax.set_theta_zero_location("N")
ax.set_theta_direction('clockwise')
show()
谢谢!
我想要这样的东西:
到目前为止我已经到达这里:
我还需要去掉外面的白圈和度数。
谢谢!
对于标签:
halfwedge = np.pi/8
for i in range(8):
ax.text(np.pi/2 - halfwedge*(2*i+1), 0.425, labels2[i])
for i in range(4):
ax.text(np.pi/2 - halfwedge*2*(2*i+1), 0.15, labels[i])
要掌握坐标系:
ax.text(0,0,'0,0 transAxes',transform=ax.transAxes)
ax.text(0,1,'0,1 transAxes',transform=ax.transAxes)
ax.text(.5,0,'.5,0 transAxes',transform=ax.transAxes)
ax.text(0,1,'0,1 transData', transform=ax.transData)
ax.text(0,0,'0,0 transData', transform=ax.transData)
ax.text(np.pi/2,1,'pi/2,1 transData', transform=ax.transData)
ax.text(np.pi,0.5,'pi,0.5 transData', transform=ax.transData)
ax.text(np.pi*3/2,1,'3pi/2,1 transData', transform=ax.transData)
而且您确实希望循环中所有这些 ax.add_artist 行,还有标签!
要关闭轴:
ax.spines['polar'].set_visible(False)
ax.xaxis.set_ticks([])
要使颜色更加鲜明,请查看颜色图——您可以设置数据的上限和下限以增加颜色的可能分布。