极坐标图-加粗一个网格线

4

我正在尝试使用极坐标图来制作雷达图。我想知道如何将其中一条网格线加粗(而其他网格线应保持标准)。

对于我的特定情况,我想突出显示与ytick“0”相关联的网格线。

from matplotlib import pyplot as plt
import pandas as pd
import numpy as np
#Variables
sespi = pd.read_csv("country_progress.csv")
labels = sespi.country
progress = sespi.progress
angles=np.linspace(0, 2*np.pi, len(labels), endpoint=False)
#Concatenation to close the plots
progress=np.concatenate((progress,[progress[0]]))
angles=np.concatenate((angles,[angles[0]]))

#Polar plot
fig=plt.figure()
ax = fig.add_subplot(111, polar=True)
ax.plot(angles, progress, '.--', linewidth=1, c="g")
#ax.fill(angles, progress, alpha=0.25)
ax.set_thetagrids(angles * 180/np.pi, labels)
ax.set_yticklabels([-200,-150,-100,-50,0,50,100,150,200])
#ax.set_title()
ax.grid(True)
plt.show()
2个回答

3

绘图中的网格线是Line2D对象。因此,您无法将其加粗。您可以执行以下操作(部分在其他答案中显示),增加线宽和更改颜色,但不是绘制新线条,而是对指定的网格线进行操作。

首先需要找到要更改的y刻度标签的索引:

y_tick_labels = [-100,-10,0,10]
ind = y_tick_labels.index(0) # find index of value 0

你可以使用 gridlines = ax.yaxis.get_gridlines() 获取网格线列表。然后在此列表中使用先前找到的索引来更改正确网格线的属性。
以 matplotlib 官方库中极坐标图为例,以下是一个完整的案例示例:
r = np.arange(0, 2, 0.01)
theta = 2 * np.pi * r

ax = plt.subplot(111, projection='polar')
ax.set_rmax(2)
ax.set_rticks([0.5, 1, 1.5, 2])  # less radial ticks
ax.set_rlabel_position(-22.5)  # get radial labels away from plotted line
ax.grid(True)

y_tick_labels = [-100, -10, 0, 10]
ax.set_yticklabels(y_tick_labels)
ind = y_tick_labels.index(0)  # find index of value 0

gridlines = ax.yaxis.get_gridlines()
gridlines[ind].set_color("k")
gridlines[ind].set_linewidth(2.5)

plt.show()

这将会得到:

在此输入图片描述


0

这只是一个技巧,但你可以画一个圆并将其 linewidthcolor 更改为你认为加粗的任何颜色。例如:

import matplotlib.pyplot as plt
import numpy as np

Yline = 0
Npoints = 300

angles = np.linspace(0,360,Npoints)*np.pi/180
line = 0*angles + Yline

ax = plt.subplot(111, projection='polar')
plt.plot(angles, line, color = 'k', linewidth = 3)
plt.ylim([-1,1])
plt.grid(True)
plt.show()

在这段代码中,我使用plt.plot绘制了一条线,该线连接两个向量anglesline之间的任意点。前者实际上是介于02*np.pi之间的所有角度。后者是固定的,并且等于您想要绘制的那条线的“高度”Yline
我建议你尝试减少和增加Npoints,同时查看np.linspace()的文档,以便了解圆形的圆滑问题。

谢谢您的建议。我添加了您代码中的plt.plot行,确实在原始图形上绘制了一个圆圈。但是,我不明白如何移动这个圆圈(如果我想要的话;现在它被绘制在y轴的0坐标上,这很好),也不知道如何为这个圆圈带来更好的分辨率(它的形状不像原始图形中的其他圆圈那样完美)...无论如何,这是一个重大进展,感谢您的建议 :) - Michaël Weber
我会编辑我的答案,考虑到你的问题。 - Liris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接