天道酬勤,学无止境

极坐标图在 matplotlib 中给出了错误的角度(Polar plot gives wrong angles in matplotlib)

问题

我试图在 Python 中绘制赤经 - 赤纬极坐标图,其中角度表示赤经,赤纬半径表示±30。

我的代码是

import numpy
import matplotlib.pyplot as pyplot

ra = [345.389547454166689,31.892236646759279,45.893722479722229,93.955296573703706,160.079453957685217,211.154701609814822,256.486559377222193,307.258751710462889,299.691923545370344,340.364168244814834,335.077343971296386,358.126565808425880]
dec = [23.835021447037050,25.218513920000003,27.509148433518519,26.551432991388879,-25.077519630833340,-20.134061982500004,-21.042512836851849,-4.903512838240742,-0.506450475370370,14.280932901944448,19.222101837500002,18.792707990925926]   

fig = pyplot.figure()
ax = fig.add_axes([0.1,0.1,0.8,0.8],polar=True)
ax.set_ylim(-30,30)
ax.set_yticks(numpy.arange(-30,30,10))
ax.scatter(ra,dec,c ='r')


pyplot.show()    

这会产生以下图表: 在此处输入图片说明

显然我误解了极坐标图的工作原理,因为 RA 不对应于 theta = 0 的圆角。例如,我的一个点应该有 RA = 45.89 度,但似乎没有任何点与此相对应。

关于我做错了什么的任何建议?

回答1

该图需要弧度。 添加以下行并重新绘制正确显示:

ra  = [x/180.0*3.141593 for x in ra]

在此处输入图片说明

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何使matplotlib极坐标图中的角度顺时针旋转,顶部为0°?(How to make the angles in a matplotlib polar plot go clockwise with 0° at the top?)
    问题 我正在使用matplotlib和numpy绘制极坐标图。 这是一些示例代码: import numpy as N import matplotlib.pyplot as P angle = N.arange(0, 360, 10, dtype=float) * N.pi / 180.0 arbitrary_data = N.abs(N.sin(angle)) + 0.1 * (N.random.random_sample(size=angle.shape) - 0.5) P.clf() P.polar(angle, arbitrary_data) P.show() 您会注意到0°位于图上的3点,并且角度逆时针旋转。 对于我的数据可视化而言,在12点位置设置0°并顺时针旋转角度会更有用。 除了旋转数据和手动更改轴标签之外,还有其他方法可以这样做吗? 回答1 更新这个问题,在Matplotlib 1.1,现在有两种方法在PolarAxes用于设置的θ方向(CW / CCW)和位置THETA = 0。 查看http://matplotlib.sourceforge.net/devel/add_new_projection.html#matplotlib.projections.polar.PolarAxes 具体来说,请参见set_theta_direction()和set
  • 带有“浮动”径向轴的极坐标图(Polar plot with a 'floating' radial axis)
    问题 我正在处理一个由网格中的大量极坐标图组成的图形,所有这些图在径向轴上共享一个共同的比例。 为了适合图形,每个图都需要非常小,但是当我缩小轴的尺寸时,径向轴的刻度标签看起来拥挤且难以辨认,并且模糊了我试图绘制的数据。 例如: import numpy as np from matplotlib import pyplot as plt fig, axes = plt.subplots(1, 4, figsize=(9, 2), subplot_kw=dict(polar=True)) theta = np.r_[np.linspace(0, 2*np.pi, 12), 0] for aa in axes.flat: x = np.random.rand(12) aa.plot(theta, np.r_[x, x[0]], '-sb') aa.set_rlim(0, 1) fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9, wspace=0.5) 我意识到可以通过减小字体大小和径向刻度数来部分缓解该问题,但我更愿意避免刻度标签与我的数据完全重叠。 相反,我希望有一个位于情节之外的“浮动”径向轴,如下所示: 对于普通的笛卡尔图,我只会使用ax.spine['left'].set_position(...)
  • 尝试将图像添加到极坐标图中将给出“错误:annotation_custom仅适用于笛卡尔坐标”(Trying to add an image to a polar plot gives “Error: annotation_custom only works with Cartesian coordinates”)
    问题 我已经尝试按照已经给出的答案将图像添加到绘图中,但是使用coord_polar()时它们不起作用 # install.packages("RCurl", dependencies = TRUE) library(RCurl) myurl <- "http://vignette2.wikia.nocookie.net/micronations/images/5/50/German_flag.png" # install.packages("png", dependencies = TRUE) library(png) img <- readPNG(getURLContent(myurl)) # install.packages("ggplot2", dependencies = TRUE) library(ggplot2) ger <- grid::rasterGrob(img, interpolate=TRUE) ## works, adds the image to the plot ggplot(mtcars, aes(x=mpg, y= cyl)) + geom_line() + annotation_custom(ger, 10, 15, 5) ## doesn't work ggplot(mtcars, aes(x=mpg, y= cyl)) + geom_line
  • 立体太阳图 matplotlib 极坐标图 python(Stereographic Sun Diagram matplotlib polar plot python)
    问题 我正在尝试创建一个类似于这些的简单立体太阳路径图:http://wiki.naturalfrequency.com/wiki/Sun-Path_Diagram 我可以旋转极坐标图并将比例设置为 90。如何反转 y 轴? 当前轴从 0>90 开始,如何将轴反转到 90>0 以表示方位角? 我试过了: ax.invert_yaxis() ax.yaxis_inverted() 此外,我将如何创建立体投影而不是等距投影? 我的代码: import matplotlib.pylab as plt testFig = plt.figure(1, figsize=(8,8)) rect = [0.1,0.1,0.8,0.8] testAx = testFig.add_axes(rect,polar=True) testAx.invert_yaxis() testAx.set_theta_zero_location('N') testAx.set_theta_direction(-1) Azi = [90,180,270] Alt= [0,42,0] testAx.plot(Azi,Alt) plt.show() 目前我的代码似乎甚至没有正确绘制线条,我是否需要将角度或度数转换为其他东西? 任何帮助是极大的赞赏。 回答1 我终于有时间玩弄 matplotlib。 经过大量搜索,Joe
  • 22.23.24.25.盒须图(boxplot)、棉棒图(Stem Plot; Lollipop plot)、极坐标图、雷达图(Radar Chart)
    22.盒须图(boxplot) 23.棉棒图(Stem Plot; Lollipop plot) 24.极坐标图 25.雷达图(Radar Chart) 22.盒须图(boxplot) 盒须图(也称为箱形图)是一种图表类型,通常用于说明性数据分析中,通过显示数据四分位数(或百分位数)和平均值来直观地显示数值数据的分布和偏度(skewness)。 箱形图于1977年由美国著名统计学家约翰·图基(John Tukey)发明。它能显示出一组数据的最大值、最小值、中位数、及上下四分位数。 最小值(minimum) 下四分位数(Q1) 中位数(Median,也就是Q2) 上四分位数(Q3) 最大值(maximum) 四分位间距(IQR) 箱形图将数据分为几个部分,每个部分包含该集中大约25%的数据。 请注意,上图代表的数据是完美的正态分布,大多数箱形图均不符合这种对称性(每个四分位数的长度相同)。 箱形图形状将显示统计数据集是正态分布还是偏斜。 箱形图很有用,因为它们显示了数据集中的异常值(outliers,离群值)。 离群值是在数值上与其余数据相距遥远的观测值。 查看箱形图时,离群值定义为位于箱形图whiskers之外的数据点。 import matplotlib import matplotlib.pyplot as plt import numpy as np #
  • 更改 matplotlib 极坐标图中的标签(Changing labels in matplotlib polar plot)
    问题 我正在使用 matplotlib 创建极坐标图来表示玫瑰图。 现在情节正在完美地创建。 我想用方向名称替换轴上显示的角度:N 代表 0 度,W 代表 90 度,S 代表 180 度,E 代表 270 度。 当前的玫瑰图如下所示: 注意:我曾尝试使用 windrose,但此输出更适合我的目的。 因此,为轴分配自定义标签的好方法将非常有帮助。 我使用的 python 版本是 2.6,matplotlib 版本是 1.2.0 回答1 假设你有一个轴对象ax你可以简单地做这样的事情 ax.set_xticklabels(['N', '', 'W', '', 'S', '', 'E', '']) 或者从这个老例子中获得一些灵感
  • Matplotlib-在极坐标图中绘制平滑圆(Matplotlib - Drawing a smooth circle in a polar plot)
    问题 我真的很喜欢matplotlib的极坐标图,并希望继续使用它(因为无论如何我的数据点都是在极坐标中给出的,而且我的环境是圆形的)。 但是,在图中,我想在特定点添加给定半径的圆。 通常,我会这样做: ax = plt.subplot(111) ax.scatter(data) circle = plt.Circle((0,0), 0.5) ax.add_artist(circle) plt.show() 但是,在极坐标中,我不能使用圆,因为它假定为直角坐标。 我想到的想法是:在[0,2PI]中生成具有恒定径向坐标和角坐标的点的数组,或完全切换为直角坐标。 两种解决方案都不尽如人意-使用matplotlib可以做得更好吗? 谢谢! 回答1 您可以设置Circle transform参数: %matplotlib inline import pylab as pl import numpy as np N = 100 theta = np.random.rand(N)*np.pi*2 r = np.cos(theta*2) + np.random.randn(N)*0.1 ax = pl.subplot(111, polar=True) ax.scatter(theta, r) circle = pl.Circle((0.5, 0.3), 0.2, transform=ax
  • 使用Python / Matplotlib绘制基于颜色图的(极性)色轮(Plot a (polar) color wheel based on a colormap using Python/Matplotlib)
    问题 我正在尝试在Python中创建色轮,最好使用Matplotlib。 以下工作正常: import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt xval = np.arange(0, 2*pi, 0.01) yval = np.ones_like(xval) colormap = plt.get_cmap('hsv') norm = mpl.colors.Normalize(0.0, 2*np.pi) ax = plt.subplot(1, 1, 1, polar=True) ax.scatter(xval, yval, c=xval, s=300, cmap=colormap, norm=norm, linewidths=0) ax.set_yticks([]) 但是,这种尝试有两个严重的缺点。 首先,将结果图形另存为矢量(figure_1.svg)时,色轮(按预期方式)由621种不同形状组成,分别对应于要绘制的不同(x,y)值。 尽管结果看起来像一个圆圈,但实际上并非如此。 我非常喜欢使用由一些路径点和它们之间的贝塞尔曲线定义的实际圆,例如在matplotlib.patches.Circle中。 在我看来,这似乎是“正确”的方法,其结果看起来更好(没有条纹,更好的渐变,更好的抗锯齿
  • 如何在Matplotlib中的极轴上使用对数刻度(How to use log scale on polar axis in matplotlib)
    问题 我正在尝试创建一个在径向轴上具有对数刻度的极坐标图,但是我一直遇到错误。 下面是一些示例代码和错误。 在笛卡尔坐标系中似乎工作正常,有人知道发生了什么吗? import matplotlib.pyplot as plt import numpy as np import matplotlib.cm as cm bazbins = np.linspace(0, 2*np.pi, 360) fbins = np.logspace(np.log10(0.05), np.log10(0.5), 101) theta, r = np.meshgrid(bazbins, fbins) # Set up plot window fig, ax = plt.subplots(figsize=(12,9))#, subplot_kw=dict(projection='polar')) # polar ax.set_theta_zero_location('N') ax.set_theta_direction(-1) ax.set_rscale('log') # carthesia #ax.set_yscale('log') # Plot data #ax.pcolormesh(theta, r, r) plt.gca().invert_yaxis() ax.contourf(theta, r
  • Matplotlib 极坐标图径向轴偏移(Matplotlib polar plot radial axis offset)
    问题 我想知道,是否可以偏移径向轴的起点或将其移到图形之外。 这是我希望达到的目标: 这就是我现在所拥有的。 我已阅读有关 SO 的文档和不同主题,但找不到任何有用的信息。 这是否意味着如果没有在任何地方提到它甚至是不可能的。 先感谢您。 编辑(添加用于创建绘图的代码片段): ax = fig.add_subplot(111, projection='polar') ax.set_theta_zero_location('N') ax.set_theta_direction(-1) ax.plot(X,lines[li]*yScalingFactor,label=linelabels[li],color=color,linestyle=ls) 回答1 我不确定polar plot可以这样调整。 但这里有一个变通方法,基于此处给出的最后一个示例:浮动轴。 我在代码中包含了解释性注释,如果你复制/粘贴它,它应该按原样运行: import mpl_toolkits.axisartist.floating_axes as floating_axes from matplotlib.projections import PolarAxes from mpl_toolkits.axisartist.grid_finder import FixedLocator, \ MaxNLocator
  • [三] 3 图表绘制工具:Matplotlib -- 图表绘制
    目录 一、plt.plot()二、柱状图、堆叠图1、plt.plot(kind = 'bar/barh', stacked = True)2、plt.bar() 三、面积图 plt.plot.area()四、填图 plt.fill()、plt.fill_between()五、饼图 plt.pie()六、直方图 plt.hist()、密度图 plt.plot(kind = 'kde')1、直方图 plt.hist()2、堆叠直方图 DataFrame.plot.hist(stacked = True) 七、散点图1、散点图 plt.scatter()2、矩阵散点图 pd.scatter_matrix() 八、极坐标图1、plt.polar()2、plt.subplot(121, projection = "polar") 或fig.add_subplot(121, polar = True)3、雷达图:极坐标的折线图+填图4、极轴图:极坐标的柱状图 import numpy as np import pandas as pd import matplotlib.pyplot as plt % matplotlib inline 一、plt.plot() DataFrame.plot(x=None, y=None, kind=‘line’, ax=None, subplots
  • 如何在R中绘制极坐标?(How to plot polar coordinates in R?)
    问题 假设(x(t),y(t))具有极坐标(√t,2πt)。 绘制t∈[0,10]的(x(t),y(t))。 R中没有适当的函数可以绘制极坐标。 我通过给出x =√t&y =2πt来尝试正态图。 但是结果图不符合预期。 我是从“使用r进行科学编程和仿真入门”中得到这个问题的,而这本书告诉我们图应该是螺旋形的。 回答1 进行序列: t <- seq(0,10, len=100) # the parametric index # Then convert ( sqrt(t), 2*pi*t ) to rectilinear coordinates x = sqrt(t)* cos(2*pi*t) y = sqrt(t)* sin(2*pi*t) png("plot1.png");plot(x,y);dev.off() 这不会显示顺序字符,因此请添加线以连接顺序中的相邻点: png("plot2.png");plot(x,y, type="b");dev.off() 回答2 如前面的评论中已经提到的,R可以使用极坐标进行绘制。 软件包plotrix具有一个称为polar.plot的函数来执行此操作。 极坐标由长度和角度定义。 此函数可以采用一系列长度和一系列角度来绘制极坐标。 例如使一个螺旋: library(plotrix) plt.lns <- seq(1, 100, length
  • gnuplot具有3D数据集中的热图的2D极坐标图-可能吗?(gnuplot 2D polar plot with heatmap from 3D dataset - possible?)
    问题 我想绘制一个使用笛卡尔坐标在3D中作为曲面完成的图,并在POLAR坐标中以2D在热图中查看它。 这样做的原因是我正在获取该坐标系中某个系统上的数据。 我只找到了一些相关的示例,但是在尝试使其与我的数据一起使用时陷入困境。 我目前正在使用矩阵格式,并且如果可以帮助使图表正常工作,则可以重新格式化数据集。 数据是在扬声器上进行的SPL测量。 将麦克风放置在相距固定距离处(例如,固定半径),并在整个扬声器水平方向上每10度进行一次测量。 根据20Hz至20kHz的频率获得SPL测量值。 我想使用gnuplot创建2D极坐标图。 频率将绘制为半径,扬声器周围的角度将为角度,“高度”将为SPL电平。 这应该生成一个表面,但是,我想创建一个热图pm3d,然后从上方(例如,视图0,0)或以2D图的形式查看。 我还需要添加轮廓线以显示SPL的间隔,并将其叠加在热图上。 我在这里找到了一些类似于笛卡尔坐标的东西:http://gnuplot-tricks.blogspot.com/2009/07/maps-contour-plots-with-labels.html当我尝试将极坐标用于最终的2D图时,我收到一条错误消息,极坐标图不支持“带有图像”选项。 有人可以尝试或确认吗? 我已经能够使用Splot和正上方的视图(设置视图0.0)在3D中将极坐标数据绘制为热图+轮廓线。
  • 极坐标 Matplotlib 图中的箭头(Arrows in Polar Matplotlib Plot)
    问题 我试图绘制串联 RLC 电路中电阻器、电容器和电感器两端的电压相量。 我已经完成了所有的计算,我可以用普通的ax.plot(theta,r,....)得到一个像样的图。 我想让相量向量看起来像箭头。 我一直在尝试使用ax.arrow(0,0,theta,magnitude)但它看起来仍然像一条线。 我编写的代码的要点在这里:GIST 我创建的图像是 我尝试遵循我在此列表中找到的示例,因为它与我想要完成的非常相似,它生成以下图像: 当我在我的电脑上运行他们的代码时,我得到 我在 Xubuntu 14.04 上运行 matplotlib 1.3.1。 我确实看到我使用的示例在 2009 年使用了 matplotlib 0.99。 任何帮助将非常感激。 回答1 箭头尺寸太大,这个: import matplotlib import numpy as np import matplotlib.pyplot as plt print "matplotlib.__version__ = ", matplotlib.__version__ print "matplotlib.get_backend() = ", matplotlib.get_backend() # radar green, solid grid lines plt.rc('grid', color='#316931'
  • matplotlib 极坐标二维直方图(matplotlib polar 2d histogram)
    问题 我试图在极轴上绘制一些直方图数据,但它似乎无法正常工作。 下面是一个示例,我使用找到的自定义投影如何使 matplotlib 极坐标图中的角度顺时针旋转,顶部为 0°? 它适用于散点图,所以我认为我的问题在于直方图函数。 这让我整天发疯,有没有人知道我做错了什么....... import random import numpy as np import matplotlib.pyplot as plt baz = np.zeros((20)) freq = np.zeros((20)) pwr = np.zeros((20)) for x in range(20): baz[x] = random.randint(20,25)*10 freq[x] = random.randint(1,10)*10 pwr[x] = random.randint(-10,-1)*10 baz = baz*np.pi/180. abins = np.linspace(0,2*np.pi,360) # 0 to 360 in steps of 360/N. sbins = np.linspace(1, 100) H, xedges, yedges = np.histogram2d(baz, freq, bins=(abins,sbins), weights=pwr) plt.figure
  • 关闭极坐标matplotlib图的轴边界(turn off axis border for polar matplotlib plot)
    问题 我在matplotlib中有一个极轴,该极轴的文本超出了轴的范围。 我想删除轴的边框-或将其设置为背景颜色,以使文本更清晰。 我怎样才能做到这一点? 简单地增加轴的尺寸是不可接受的解决方案(因为该图形可嵌入到GUI中,并且如果这样做会变得太小)。 将背景颜色更改为黑色以使边框不可见也是一种不可接受的解决方案。 省略了执行绘图的各个部分的大量代码,但是这里是图形和轴本身的生成: import pylab as pl fig = pl.figure(figsize=(5,5), facecolor='white') axes = pl.subplot(111, polar=True, axisbg='white') pl.xticks([]) pl.yticks([]) pl.ylim(0,10) # ... draw lots of things 回答1 只需添加以下行: axes.spines['polar'].set_visible(False) ,它就应该消失了! 嗯,所有的解剖学术语。
  • Python 数据分析三剑客之 Matplotlib(九):极区图 / 极坐标图 / 雷达图的绘制
    CSDN 课程推荐:《Python 数据分析与挖掘》,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务。曾与联想、亨氏、网鱼网咖等企业合作多个企业级项目。 Matplotlib 系列文章: Python 数据分析三剑客之 Matplotlib(一):初识 Matplotlib 与其 matplotibrc 配置文件Python 数据分析三剑客之 Matplotlib(二):文本描述 / 中文支持 / 画布 / 网格等基本图像属性Python 数据分析三剑客之 Matplotlib(三):图例 / LaTeX / 刻度 / 子图 / 补丁等基本图像属性Python 数据分析三剑客之 Matplotlib(四):线性图的绘制Python 数据分析三剑客之 Matplotlib(五):散点图的绘制Python 数据分析三剑客之 Matplotlib(六):直方图 / 柱状图 / 条形图的绘制Python 数据分析三剑客之 Matplotlib(七):饼状图的绘制Python 数据分析三剑客之 Matplotlib(八):等高线 / 等值线图的绘制Python 数据分析三剑客之 Matplotlib(九):极区图 / 极坐标图 / 雷达图的绘制Python 数据分析三剑客之 Matplotlib(十):3D
  • 在 Python pylab 玫瑰/极坐标图中更改图例标题的字体大小(Changing font size of legend title in Python pylab rose/polar plot)
    问题 我正在尝试更改玫瑰图或“极坐标”图上现有图例标题的字体大小。 大多数代码是由其他人编写的,他不在。 我已经添加:- ax.legend(title=legend_title) setp(l.get_title(), fontsize=8) 添加标题“legend_title”,这是一个变量,用户在使用此代码的不同函数中输入字符串。 第二行不会返回错误,但似乎也没有做任何事情。 完整的代码如下。 'Rose' 和 'RoseAxes' 是某人编写的模块/函数。 有谁知道改变图例标题字体大小的方法? 我找到了一些正常图的例子,但找不到玫瑰/极坐标图的任何例子。 from Rose.RoseAxes import RoseAxes from pylab import figure, title, setp, close, clf from PlotGeneration import color_map_xml fig = figure(1) rect = [0.02, 0.1, 0.8, 0.8] ax = RoseAxes(fig, rect, axisbg='w') fig.add_axes(ax) if cmap == None: (XMLcmap,colors) = color_map_xml.get_cmap('D:/HRW/VET/HrwPyLibs
  • python中的圆形/极坐标直方图(Circular / polar histogram in python)
    问题 我有周期性数据,它的分布最好围绕一个圆圈进行可视化。 现在的问题是如何使用matplotlib进行这种可视化? 如果没有,是否可以在 Python 中轻松完成? 在这里,我生成了一些示例数据,我想用圆形直方图对其进行可视化: import matplotlib.pyplot as plt import numpy as np # Generating random data a = np.random.uniform(low=0, high=2*np.pi, size=50) 在 SX for Mathematica 的问题中有几个例子。 我想生成一个类似于以下内容之一的图: 回答1 从图库中构建此示例,您可以执行以下操作 import numpy as np import matplotlib.pyplot as plt N = 80 bottom = 8 max_height = 4 theta = np.linspace(0.0, 2 * np.pi, N, endpoint=False) radii = max_height*np.random.rand(N) width = (2*np.pi) / N ax = plt.subplot(111, polar=True) bars = ax.bar(theta, radii, width=width, bottom
  • 在 gnuplot 中创建麦克风极性模式图(Creating a microphone polar pattern plot in gnuplot)
    问题 我想创建一个麦克风极性模式图,其比例为-20 (在中心)到+5 ,步长为5 。 我发现了类似的代码,但没有任何东西允许比例为负。 然后需要将多个模式添加到覆盖几个不同频率的图中,我有度数值( 0-360 )和相应的 dB 值( -25 - +5 )。 这就是情节应该是什么样子(尽管比例略有不同): 我发现的最接近的 gnuplot 在这里:How to get aradial(polar) plot using gnu plot? 也许这可以修改以满足我的需要? 我还希望在图的顶部而不是在右侧找到0度。 我是使用 gnuplot 的新手,所以我对它的代码不是特别熟悉,因此我很难修改代码并取得巨大成功(到目前为止)。 回答1 所以你想绘制一个极坐标函数,例如r(theta) = 1 + sin(theta) 。 绘制函数很容易,只需执行 set polar plot 1+sin(t) 可以绘制一个简单的极坐标网格 set grid polar 但这使raxis和rtics的位置与您想要的位置不同。 指定自定义标签没有问题。 但是不支持角度标签,因此您需要手动设置它们。 并且必须取消设置边界和其他轴和抽动。 要获得与您显示的完全相同的图像,请使用以下脚本: set terminal pngcairo size 700,600 font ',10' set output