我正在尝试使用极坐标图投影来制作雷达图。我想知道如何仅将一条网格线设为粗体(而其他网格线应保持标准)。
对于我的具体情况,我想突出显示与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()
答案 0 :(得分:0)
这只是一个把戏,但是我想您可以绘制一个圆并将其linewidth
和color
更改为对您而言可能是粗体的内容。
例如:
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
在两个向量angles
和line
的任意点之间绘制一条线。前者实际上是0
和2*np.pi
之间的所有角度。后者是常数,等于您要绘制那条线Yline
的“高度”。
我建议您在查看Npoints
的文献的同时尝试减小和增大np.linspace()
,以了解圆度问题。
答案 1 :(得分:0)
图的网格线是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()
获取网格线列表。然后使用先前在此列表上找到的索引来更改正确的网格线的属性。
以gallery中的示例为基础,下面显示了完整的示例:
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()
哪个给: