我正在使用matplotlib制作一个大学项目的极地散点图,我无法找到如何在径向轴上添加标签。这是我的代码(我遗漏了数据,因为它是从csv中读出来的)
import matplotlib.pyplot as plt
ax = plt.subplot(111, polar=True)
ax.set_rmax(1)
c = plt.scatter(theta, radii)
ax.set_title("Spread of Abell Cluster Supernova Events as a Function of Fractional Radius", va='bottom')
ax.legend(['Supernova'])
plt.show()
(我的情节看起来像this。我似乎无法找到任何直接的方法来执行此操作。有没有人以前处理过此问题并提出任何建议?
答案 0 :(得分:2)
我不知道有这样做的内置方式,但您可以使用ax.text
制作自己的。您可以使用ax.get_rlabel_position()
获取径向刻度标签的位置,使用ax.get_rmax()/2.
例如,这是您的代码(带有一些随机数据):
import matplotlib.pyplot as plt
import numpy as np
theta=np.random.rand(40)*np.pi*2.
radii=np.random.rand(40)
ax = plt.subplot(111, polar=True)
ax.set_rmax(1)
c = plt.scatter(theta, radii)
ax.set_title("Spread of Abell Cluster Supernova Events as a Function of Fractional Radius", va='bottom')
ax.legend(['Supernova'])
label_position=ax.get_rlabel_position()
ax.text(np.radians(label_position+10),ax.get_rmax()/2.,'My label',
rotation=label_position,ha='center',va='center')
plt.show()
这是输出:
我有兴趣看看是否有更优雅的解决方案,但希望这对您有所帮助。
答案 1 :(得分:2)
from pylab import *
N = 150
r = 2*rand(N)
theta = 2*pi*rand(N)
area = 200*r**2*rand(N)
colors = theta
ax = subplot(111, polar=True)
c = scatter(theta, r, c=colors, s=area, cmap=cm.hsv)
c.set_alpha(0.75)
ax.set_ylabel('Radius', rotation=45, size=11)
show()
答案 2 :(得分:0)
与@tom略有不同的方法。这直接使用plt.legend
选项。
示例:
import matplotlib.pyplot as plt
import numpy as np
theta=np.random.rand(40)*np.pi*2.
radii=np.random.rand(40)
ax = plt.subplot(111, polar=True)
ax.set_rmax(1)
c = plt.scatter(theta, radii,label='Supernova')
ax.set_title("Spread of Abell Cluster Supernova Events as a Function of Fractional Radius", va='bottom')
ax.legend(loc='lower right', scatterpoints=1)
plt.show()
您可以将lower right
更改为upper right
,甚至更改为best
,以便将图例的对齐方式保留为matplotlib。