Für Ihre erste Frage, können Sie entweder die Anzahl der Ticks erhöhen, die, wenn Sie für kleinere Zecken wollen scheint nicht zu sein, was Sie wollen, oder Sie können die Ticks manuell manuell generieren. Dazu müssen Sie die Polarachsen eigene Grundstück Einrichtungen nutzen diese Zecken plotten, dh:
ax.plot([theta_start, theta_end], [radius_start, radius_end], kwargs**)
Sie benötigen, um das Intervall Sie diese Zecken wollen herausfinden, und dann kreuzen sie manuell mit einer Funktion wie der eine unten.
def minor_tick_gen(polar_axes, tick_depth, tick_degree_interval, **kwargs):
for theta in np.deg2rad(range(0, 360, tick_degree_interval)):
polar_axes.plot([theta, theta], [polar_axes.get_rmax(), polar_axes.get_rmax()-tick_depth], **kwargs)
die Sie dann wie folgt aufrufen können:
minor_tick_gen(ax, 0.25, 20, color = "black")
Seine Art schwer zu finden, aber polare Achse sind keine normalen Achsen, sondern Polar Axis class instances. In der Dokumentation können Sie set_ylim(min, max)
verwenden, die Sie ermöglichen um die Beschriftungen von der Linie zu entfernen, wird dies jedoch den gesamten Graphen neu skalieren. Wenn Sie außerhalb der Grenzen des Diagramms arbeiten, benötigen Sie Entwicklerwissen über das Framework, da matplotlib diese Funktionalität Ihnen nicht zur Verfügung stellt. Wenn Sie beispielsweise set_rgrids(...)
verwenden, wirkt sich auch bei einer Positionskomponente die relative Position der Etiketten nicht aus.
Setzt man diese Dinge zusammen, können Sie den folgenden Code verwenden:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import math
def minor_tick_gen(polar_axes, tick_depth, tick_degree_interval, **kwargs):
for theta in np.deg2rad(range(0, 360, tick_degree_interval)):
polar_axes.plot([theta, theta], [polar_axes.get_rmax(), polar_axes.get_rmax()-tick_depth], **kwargs)
def radian_function(x, y =None):
rad_x = x/math.pi
return "{}π".format(str(rad_x if rad_x % 1 else int(rad_x)))
ax = plt.subplot(111, projection='polar')
ax.set_rmax(2)
ax.set_rticks([3*math.pi, 6*math.pi, 9*math.pi, 12*math.pi])
ax.set_rlabel_position(112.5)
# go slightly beyond max value for ticks to solve second problem
ax.set_ylim(0, 13*math.pi)
ax.grid(True)
# generate ticks for first problem
minor_tick_gen(ax, math.pi, 20, color = "black", lw = 0.5)
ax.set_title("Polar axis label minor tick example", va='bottom')
ax.yaxis.set_major_formatter(ticker.FuncFormatter(radian_function))
ax.xaxis.set_major_formatter(ticker.FuncFormatter(radian_function))
plt.show()
folgendes Bild zu erhalten