首页 > 编程问答 >Matplotlib 雷达图刻度旋转问题

Matplotlib 雷达图刻度旋转问题

时间:2024-07-29 11:12:16浏览次数:8  
标签:python matplotlib

我正在尝试使用 matplotlib 创建雷达图。我的目标是定位每个标签,使其从不同角度指向圆心,类似于图 1 图 1 所示。但是,我目前遇到的是这个结果(图 2): 图 2 .

请告诉我如何调整我的代码以实现标签的适当旋转?提前致谢!

这是我的代码:

import math
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

df = pd.read_csv('./results/zh_en_annotation_eval.csv', sep=',',
                 index_col=0, header='infer', encoding='utf-8')

labels = df.columns.values.tolist()
N = len(labels)
values = df.loc['r'].values.tolist()

angles = [n / float(N) * 2 * math.pi for n in range(N)] + [0]


def plot_radar_chart(ax, angles, values, label, color, alpha=0.2):
    values += values[:1]
    ax.plot(angles, values, linewidth=1, linestyle='solid', label=label, color=color)
    ax.fill(angles, values, alpha=alpha, color=color)


fig, ax = plt.subplots(figsize=(16, 12), subplot_kw={'projection': 'polar'})

ax.set_theta_offset(math.pi / 2)
ax.set_theta_direction(-1)
ax.set_xticks(angles[:-1])

for i, angle in enumerate(angles[:-1]):
    angle_deg = np.degrees(angle)
    rotation = angle_deg + 90
    label_position = 1.1
    ax.text(angle, label_position, labels[i], transform=ax.transData,
            ha='center', va='center', rotation=rotation, color='grey', size=10)

maximum = math.ceil(df.loc['r'].max())
minimum = 0.0
ticks = np.linspace(minimum, maximum, 3)
plt.yticks(ticks, labels=[str(tick) for tick in ticks], color='grey', size=7)
plt.ylim(minimum, maximum)

plot_radar_chart(ax, angles, values, label='r', color='red')

ax.set_xticklabels([])
plt.title(f"En-Zh Pearson Correlation", size=11, y=1.1)

plt.legend(loc='upper right', bbox_to_anchor=(1.1, 1.1))
plt.savefig('./results/zh_en_annotation_rader_plot.png')

GPT 对此无能为力。


问题在于你对 rotation 参数的计算方式。当前,你将旋转角度设置为 angle_deg + 90 ,这导致标签旋转过度。

你需要做的是:

  1. 计算从圆心到标签点的向量角度。 这可以通过 np.arctan2(y, x) 计算,其中 (x, y) 是标签点相对于圆心的坐标。
  2. 将角度转换为度数。
  3. 将旋转角度设置为计算的角度值。

以下是如何修改代码以实现此目的:

for i, angle in enumerate(angles[:-1]):
    # ... (其他代码) ...

    # 计算标签点坐标
    x = label_position * np.cos(angle)
    y = label_position * np.sin(angle)

    # 计算向量角度并转换为度数
    rotation = np.degrees(np.arctan2(y, x))

    # ... (使用更新后的 rotation 值绘制标签) ...

通过此更改,标签将从不同角度指向圆心,从而实现你想要的效果。

标签:python,matplotlib
From: 78805281

相关文章

  • 界面自动化测试录制工具,让python selenium自动化测试脚本开发更加方便
    自动化测试中,QTP和seleniumIDE都支持浏览器录制与回放功能,简单的来说就像一个记录操作步骤的机器人,可以按照记录的步骤重新执行一遍,这就是脚本录制。个人觉得传统录制工具有些弊端,加上要定制支持我自己的自动化框架(python单机版自动化测试框架源代码),所以自己用javascript写了一个......
  • Python 面试常问问题及应用场景解析
    引言随着Python在数据科学、Web开发、自动化脚本、机器学习等领域中的广泛应用,越来越多的公司开始寻找具备Python技能的人才。因此,在Python面试中,面试官通常会通过一系列问题来评估应聘者的编程基础、问题解决能力和对Python特性的理解程度。本文将涵盖Python面试中最常见的......
  • python 虚拟环境
    python虚拟环境Python的venv模块允许你创建轻量级的“虚拟环境”,这些环境是独立的Python安装,用于项目的依赖隔离。每个虚拟环境都有自己的Python解释器、库和脚本,与系统中安装的Python相互隔离。这意呀着,你可以在一个项目中安装特定版本的库,而不会影响到系统上其他Pyt......
  • 使用 Azure Devops API (Python) 撰写 PR 评论
    在任何地方都找不到直接的方法。如何通过Python中的AzureDevopsAPI将注释添加到拉取请求?可以使用AzureDevOpsPythonAPI将注释添加到拉取请求。以下是执行此操作的方法:1.安装AzureDevOps库:pipinstallazure-devops2.导入必要的类并对的组......
  • Python\Python312\Lib\site-packages\torch\lib\fbgemm.dll
    在此处输入图像描述我正在尝试从HuggingFace导入GPT-2变压器模型,但当我尝试导入它时,遇到错误。即使当我尝试仅导入Torch时,我也会收到相同的错误。我已尝试重新安装Torch并完成了所有操作,包括更新VisualC++Redistributable软件包和更新我的驱动程序,但问题......
  • Python GEKKO 不更新参数
    我正在Python中使用GEKKO来估计弹跳球的轨迹。为此,我需要估计2个变量:e_1(恢复系数)和q_1(每次弹跳时的水平速度损失)。我已为其编写了以下代码,但参数似乎没有更新,尽管解算器已成功执行。参数的初始值与参数的最终优化值相同e_1=0.8和q_1=1代码:imp......
  • Python内置模块常用总结
    目录unittestunittest点击查看代码importunittestfromhtmltestreportimportHTMLTestReportclassTestOne(unittest.TestCase):@classmethoddefsetUpClass(cls)->None:print(f'setUpClass')@classmethoddeftearDownClass......
  • 使用 warpPerspective 生成​​全景图像并使用 python 进行单应拼接
    我没有获得正确的全景图像,并且图像质量随着图像的缝合而降低。我期待获得正确的360度图像,并且不会因正确拼接而降低质量。当我使用网络摄像头图像时。它应该得到没有不匹配的拼接图像。我正在研究匹配FCFS中的图像或最佳匹配的方法。创建并添加一个输入图像以及image1和im......
  • 通过 python 获取 android.view.ViewGroup 中的子项
    是否可以使用python、adb或任何库从android.view.ViewGroup获取子元素或文本,但不需要java和kotlin?我正在尝试使用python自动化android模拟器。与模拟器的交互通过adb进行。当我得到屏幕转储时,我看到我需要的元素是android.view.ViewGroup,并且text和content-......
  • Python反编译失败。 (不支持的操作码:JUMP_IF_NOT_EXC_MATCH)
    我尝试使用“pycdc.exe”反编译使用pycdc.exe失败。因为错误“不支持的操作码:JUMP_IF_NOT_EXC_MATCH”在此处输入图像描述使用pycdc.exe失败。因为错误“不支持的操作码:JUMP_IF_NOT_EXC_MATCH”你知道我为什么失败吗?(我试图编译的.pyc似乎是3.10版本)......