gpt4 book ai didi

python - 雷达图 Matplotlib Python : how to set label alignment

转载 作者:行者123 更新时间:2023-12-02 03:38:15 28 4
gpt4 key购买 nike

我正在尝试将雷达图的标签与轴对齐,但我遇到了困难。

没有标签对齐,我的标签居中并超出轴线 enter image description here .

当我将标签的前半部分(图的右侧)设置为左对齐,将后半部分设置为右对齐时,我得到了非“圆形”对齐 enter image description here

为此,我在 xticklabels 中循环并设置水平对齐方式。

# Draw one axe per variable + add labels labels yet
plt.xticks(angles, categories)
for label,i in zip(ax.get_xticklabels(),range(0,len(angles))):
if i<len(angles)/2:
angle_text=angles[i]*(-180/pi)+90
#label.set_horizontalalignment('left')

else:
angle_text=angles[i]*(-180/pi)-90
#label.set_horizontalalignment('right')
label.set_rotation(angle_text)

我想有一个正确的方法可以做到这一点,但我想不出来,因为我不知道它是否应该考虑偏移、平移或如何调整极坐标来做到这一点。

谢谢你的帮助

保罗

完整代码如下

from math import pi
import matplotlib.pyplot as plt
%matplotlib inline
import pandas as pd

## Generate Data
labels_test=[]
for i in range(0,40):
labels_test.append("Fooooooooo"+str(i))
pd_radar=pd.DataFrame(data=np.random.randint(low=0, high=10, size=(2, 40)),columns=labels_test)

# number of variable
categories=list(pd_radar)
N = len(categories)

# What will be the angle of each axis in the plot? (we divide the plot / number of variable)
angles = [n / float(N) * 2 * pi for n in range(N)]

# Initialise the spider plot
fig=plt.figure(figsize=(20,10))
ax = plt.subplot(111, polar=True)

# If you want the first axis to be on top:
ax.set_theta_offset(pi / 2)
ax.set_theta_direction(-1)

# Draw one axe per variable + add labels labels yet
plt.xticks(angles, categories)
for label,i in zip(ax.get_xticklabels(),range(0,len(angles))):
if i<len(angles)/2:
angle_text=angles[i]*(-180/pi)+90
label.set_horizontalalignment('left')

else:
angle_text=angles[i]*(-180/pi)-90
label.set_horizontalalignment('right')
label.set_rotation(angle_text)
# Draw ylabels
ax.set_rlabel_position(0)


# ------- PART 2: Add plots

# Plot each line of the data

# Ind1
values0=pd_radar.iloc[0].values.flatten().tolist()
ax.plot(angles, values0, linewidth=1, linestyle='solid', label="Label 1",color='yellow')
ax.fill(angles, values0, 'r', alpha=0.1,color='yellow')

# Ind2
values1=pd_radar.iloc[1].values.flatten().tolist()
ax.plot(angles, values1, linewidth=1, linestyle='solid', label="Label 2",color='deepskyblue')
ax.fill(angles, values1, 'r',color='deepskyblue', alpha=0.1)

# Add legend
plt.show()

最佳答案

当前代码does not run with matplotlib 2.2 .但是,以下解决方案适用于 OP 正在使用的版本 2.0.2。有关使用较新版本的解决方法,请参阅 this question .

matplotlib 中的文本有一个 rotation mode .

旋转模式可以是"default",这种情况下文本先旋转再对齐

enter image description here

或者它可以是“anchor”,在这种情况下文本先对齐然后旋转。

enter image description here

因此,为了使极坐标图上的刻度标签指向外,您需要将文本的对齐设置为 "left",然后将旋转模式设置为 “ anchor ”

for label,rot in zip(ax.get_xticklabels(),ticks):
label.set_rotation(rot*180./np.pi)
label.set_horizontalalignment("left")
label.set_rotation_mode("anchor")

完整示例:

import numpy as np
import matplotlib.pyplot as plt

fig=plt.figure(figsize=(5,5))
ax = plt.subplot(111, polar=True)

ticks = np.linspace(0, 2*np.pi, 20, endpoint=False)
text = lambda : "".join(np.random.choice(list("manuladefil"), size=10))
labels = [text() for _ in range(len(ticks))]

plt.xticks(ticks, labels, size=16)
for label,rot in zip(ax.get_xticklabels(),ticks):
label.set_rotation(rot*180./np.pi)
label.set_horizontalalignment("left")
label.set_rotation_mode("anchor")

plt.tight_layout()
plt.show()

enter image description here

关于python - 雷达图 Matplotlib Python : how to set label alignment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49488018/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com