当前位置: 首页 > 知识库问答 >
问题:

如何在Matplotlib的极坐标图中移动ytick标签

桂鑫鹏
2023-03-14

我的极坐标图是什么样子的

我试图移动ytick标签,使它们与轴标签类似地对齐。例如,'PTS'标签水平对齐到其轴,但ytick标签向右移动。

对于y值标签,我使用set_rgrids()函数指定角度和标签值,并使用tick_params()函数指定标签属性,如旋转。但是,此函数不允许我设置标签的文本框对齐。

如何将y值向左移动,使其直接位于相应的轴标签下?

for i in range(N):
    #rgrids() for y-labels, tick_params() for properties of y-labels
    axes[i].set_rgrids(rgrids, angle=angles[i], labels=rlabels[i])
    axes[i].tick_params('y', labelrotation=(angles[i]-180 if 90<angles[i]<270 else angles[i]))

    axes[i].set_ylim(ymin, ymax)
    axes[i].set_theta_offset(np.deg2rad(90))
    #text() for axis label
    axes[i].text(np.deg2rad(angles[i]), 1.08*ymax,cat[i], va="center", ha='center',  size=13, rotation=(angles[i]-180 if 90<angles[i]<270 else angles[i]))

完整代码:

import numpy as np
import matplotlib.pyplot as pl

def normalize(val, min=0, max=100):
    value = val-min
    range = max-min
    frac = float(value)/range
    return frac*100

cat = ['PTS', 'FG%', 'FGM', '3PM', '3FG%']
N = len(cat)
angles = np.arange(0, 360, 360.0/N)

rcount = 9
ranges = [[5, 33], [30, 55], [3, 10.2], [0.1, 4.5], [22, 46]]
rlabels = [[0]*rcount] * N
ymin = 0
ymax = 100

for i in range(N):
    size = ranges[i][1] - ranges[i][0]
    step = float(size)/rcount
    rlabels[i] = list(np.arange(ranges[i][0] + step, ranges[i][1] + step, step))
    rlabels[i] = [round(x,1) for x in rlabels[i]]

step = (ymax - ymin)/float(rcount)
rgrids = list(np.arange(ymin + step, ymax + step, step))

rect = [0.05, 0.05, 0.8, 0.8]
fig = pl.figure(figsize=(7, 7))

axes = [fig.add_axes(rect, projection="polar", label="axes%d" % i) for i in range(N)]
axes[0].set_thetagrids(angles, labels=cat, fontsize=14, visible=False)#jesli visible=False to trzeba dodac recznie za pomocą ax.text()
axes[0].grid(color='gray', linewidth = 1)

for labels in rlabels:
    labels[0] = ''

for i in range(N):
    axes[i].set_rgrids(rgrids, angle=angles[i], labels=rlabels[i])
    axes[i].tick_params('y',  labelrotation=(angles[i]-180 if 90<angles[i]<270 else angles[i]))
    axes[i].set_ylim(ymin, ymax)
    axes[i].set_theta_offset(np.deg2rad(90))
    axes[i].text(np.deg2rad(angles[i]), 1.08*ymax,cat[i], va="center", ha='center',  size=13, rotation=(angles[i]-180 if 90<angles[i]<270 else angles[i]))

for i in range(1, N):
    axes[i].spines["polar"].set_visible(False)
    axes[i].patch.set_visible(False)
    axes[i].grid("off")
    axes[i].xaxis.set_visible(False)

共有1个答案

鲁华皓
2023-03-14

我想你想定一个目标

ax.text(..., ha='left', rotation_mode="anchor", ...)
 类似资料:
  • 我试图绘制一个右扬升-赤纬,Python中的极地图,其中角度表示右扬升,半径赤纬,范围在±30之间。 我的代码是 很明显,我误解了极坐标图的工作原理,因为RA与θ=0的角度圆不对应。例如,我的一个点的RA=45.89度,但似乎没有一个点与此对应。 对我做错了什么有什么建议吗?

  • 我在将图像转换为极坐标时遇到问题。在Photoshop中很容易:)所以这对我来说是一个新领域。 我有以下图片: 结果应该是这样的: 我在这里看了一下,了解了一些基本知识,但仍然对圆的平方有点困惑: 我几乎不知道如何重新绘制图像。还有一个警告:由于管理限制,我想避免使用像Numpy这样的外部库。

  • 我正在尝试将极坐标的图像转换为笛卡尔坐标。 将图像转换为极坐标的示例显式执行-想要一个光滑的矩阵方法 我原以为使用上述方法是小菜一碟,但事实并非如此!!如果有人发现我的代码有错误,请告诉我! 我发现非常奇怪的是,当我改变phi时,它会做出根本性的改变,而不是以我期望的方式! 干杯

  • 我想沿x轴水平移动一些记号的标签,而不移动相应的记号。 更具体地说,当使用

  • 问题内容: 以下python代码应在[-pi / 2,pi / 2]范围内绘制r(theta)= theta。 生成图: 但是,我希望它会产生: r(θ)的负值似乎已被裁剪。如何使matplotlib绘制r(theta)的负值? 问题答案: 第一个情节似乎是正确的。它只是不显示负值。可以通过明确设置r轴的极限来克服此问题。 此行为基于以下假设:任何数量都应可绘制在极坐标图上,这可能对有关相对数量的

  • 编辑:我决定把这个问题分成两部分,因为它实际上是两个问题:1。如何在MATLAB中绘制极曲面图(本问题)和2。如何将拟合极坐标数据点放入粗略(非极坐标)矩阵 我有一个包含某些灰色值(介于0和1之间的值)的矩阵。这些点存储在一个矩形矩阵中,但实际上数据点是通过旋转探测器获得的。这意味着我实际上有极坐标(我知道起始矩阵中每个像素的极坐标)。 我想制作一个数据点的极线图。我有下面的例子。 因为MATLA