Полярный график - выделите одну линию сетки жирным шрифтом - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь использовать полярную проекцию для построения радиолокационной карты.Я хотел бы знать, как поставить только одну линию сетки жирным шрифтом (в то время как остальные должны оставаться стандартными).

В моем конкретном случае я хотел бы выделить линию сетки, связанную с символом «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 ]

0 голосов
/ 17 декабря 2018

Линии сетки графика являются объектами 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().Затем используйте индекс, который вы нашли ранее в этом списке, чтобы изменить свойства правильной линии сетки.

Используя пример из галереи в качестве основы, полный пример показан ниже:

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()

Что дает:

enter image description here

0 голосов
/ 14 декабря 2018

Это просто трюк, но я думаю, вы могли бы просто нарисовать круг и изменить его 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()чтобы понять вашу проблему с округлостью круга.

...