我正在尝试使用MATLAB命令polar,它似乎从右侧0度开始,角度沿逆时针方向增加.
然而,我想做的是,它会改变这一点,以便极坐标系统从0度开始为"北",并且角度以顺时针方向增加.
有一个简单的方法吗?
编辑:我希望MATLAB 显示极坐标图,其中0从北方开始,角度以顺时针方式增加.
我正在尝试创建一个在径向轴上具有对数刻度的极坐标图,但是我一直遇到错误。下面是一些示例代码和错误。在笛卡尔坐标系中似乎工作正常,有人知道发生了什么吗?
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, r)
ax.set_ylim((0.0, 0.5))
plt.show()
Run Code Online (Sandbox Code Playgroud)
Tkinter回调中的异常:
Traceback (most recent call last):
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1413, in __call__
return self.func(*args)
File "/usr/lib/pymodules/python2.7/matplotlib/backends/backend_tkagg.py", line 236, in resize
self.show() …Run Code Online (Sandbox Code Playgroud) 如何使用ggplot中的coor_polar投影,x轴标签的角度与外部x轴的角度相同?这类似于在使用coord_polar()时在ggplot2中旋转x轴文本,但我不太了解数学以适应它.我在这种工作下面找到了一个试错法,其中angle = c(c(1:3)*c(-14,-22.3,-22),-90,c(3:1)*c(22,22.3,14),c(1:3)*c(-14,-22.3,-22),90,c(3:1)*c(22,22.3,14)).x轴标签一直向同一方向旋转也是可以的.如果所有其他方法都失败了,我可能会放弃旋转标签并添加第二个图例,如两个极地ggplot的图例(一个自定义).谢谢您的帮助!
require(ggplot2)
df.test <- data.frame(Names=c("name01", "name02", "name03", "name04", "name05", "name06", "name07", "name08", "name09", "name10", "name11", "name12", "name13", "name14"),Values=rep(1,24))
p <- ggplot(df.test, aes(Names, fill=Values))
p + coord_polar(theta="x", direction=1) +
geom_bar(stat="bin", colour="gray", alpha=.7) +
theme(axis.text.x = element_text(angle = c(c(1:3)*c(-14,-22.3,-22),-90,c(3:1)*c(22,22.3,14),c(1:3)*c(-14,-22.3,-22),90,c(3:1)*c(22,22.3,14))))
Run Code Online (Sandbox Code Playgroud) 我一直在对这种转换背后的数学进行大量搜索,到目前为止我能想到的最好的方法是:
x = sin(horizontal_angle) * cos(vertical_angle)
y = sin(horizontal_angle) * sin(vertical_angle)
z = cos(horizontal_angle)
Run Code Online (Sandbox Code Playgroud)
对于任意角度,这都很好。我遇到问题的地方是当其中一个旋转为 0 度时。在 0 度(或 180、或 360,或...)时,sin() 将为零,这意味着我从上述公式中得到的 x 和 y 坐标都将为零,无论其他角度如何被设置为。
有没有更好的公式,在某些角度不会混乱?到目前为止我的搜索还没有找到,但必须有一个解决方案来解决这个问题。
更新: 经过一些实验,我发现我的主要误解是我假设球坐标的极点是垂直的(就像行星上的纬度和经度),而它们实际上是水平的(投影到屏幕上)。这是因为我在屏幕空间(x/y 映射到屏幕,z 投影到屏幕)中工作,而不是传统的 3D 环境,但不知怎的,我并不认为这会成为一个影响因素。
最终的公式对我有用,使两极正确定向:
x = cos(horizontal_angle) * sin(vertical_angle)
y = cos(vertical_angle)
z = sin(horizontal_angle) * sin(vertical_angle)
Run Code Online (Sandbox Code Playgroud) 我正在尝试按照此答案的风格,使用 Python 中的 matplotlib 以顺时针方式绘制数据。我在绘制数据时注意到奇怪的行为;数据点具有正确的 y 值,但不会出现在正确的 x 值(即时间)处。我首先认为我的数据是错误的,但是在使用以下工作示例重新创建我的问题后,我得出的结论是错误一定在其他地方。
import numpy as np
import matplotlib.pyplot as plt
ax = plt.subplot(111, polar=True)
equals = np.linspace(0, 360, 24, endpoint=False) #np.arange(24)
ones = np.ones(24)
ax.scatter(equals, ones)
# Set the circumference labels
ax.set_xticks(np.linspace(0, 2*np.pi, 24, endpoint=False))
ax.set_xticklabels(range(24))
# Make the labels go clockwise
ax.set_theta_direction(-1)
# Place 0 at the top
ax.set_theta_offset(np.pi/2.0)
plt.show()
Run Code Online (Sandbox Code Playgroud)
考虑到 的定义,我预计这些点的 x 值与小时数一致equals。它目前被定义为角度,但我也尝试将其定义为小时。为什么情况并非如此?如何使我的数据与相应的时间一致?
我在笛卡尔坐标系中有一个点,例如: x = 3&y = 5
我想在给定方向(以度为单位)上移动一段距离后,获得该点的新坐标。
如何获得新的x和新的y?
我需要以下以极坐标形式给出的非线性系统的相图......
\dot{r} = 0.5*(r - r^3)
\dot{\theta} = 1
我知道如何在 Mathematica 中做到这一点...
field1 = {0.5*(r - r^3), 1};
p1 = StreamPlot[Evaluate@TransformedField["Polar" -> "Cartesian", field1, {r, \[Theta]} -> {x, y}], {x, -3, 3}, {y, -3, 3}, Axes -> True, StreamStyle -> Gray, ImageSize -> Large];
Show[p1, AxesLabel->{x,y}, ImageSize -> Large]
Run Code Online (Sandbox Code Playgroud)
如何在 Python 中使用 pyplot.quiver 执行相同操作?
python plot wolfram-mathematica matplotlib polar-coordinates
由于某些原因,当我尝试(theta = 0, r = 0)使用以下代码进行绘图时:
import matplotlib.pyplot as plt
plt.polar(0, 0, marker='x')
plt.show()
Run Code Online (Sandbox Code Playgroud)
该点未居中:
我能够在我的计算机和 Repl.it 上多次重现此错误:链接
那么,我怎样才能将极坐标图居中,以便显示x在它的中心呢?
我正在尝试用 Python 生成 RGB 极坐标图,并且我希望matplotlib.pyplot.imshow能够做到这一点。但是,每当我尝试使用此方法绘制数据时,我都会得到空白输出。
import matplotlib.pyplot as plt
import numpy as np
data = np.array([[[0,0,1],[0,1,0],[1,0,0]],[[0,0,0.5],[0,0.5,0],[0.5,0,0]]])
# Sample, any N,M,3 data should work
ax = plt.subplot(111,polar=True)
ax.imshow(data,extent=[0,2*np.pi,0,1]) # Produces a white circle
Run Code Online (Sandbox Code Playgroud)
有没有使用上述方法或其他方法来完成此任务的好方法?
谢谢。
编辑:我设法通过使用创建了一个象限,extent=[0,np.pi/2,0,1]但它的使用显然对极坐标图有问题。因为除了完整的象限之外的任何东西都不会产生预期的结果。
我想生成一个半笛卡尔半极坐标图。例如,高斯曲线的一半采用极坐标格式,另一半采用笛卡尔格式。哪个是最好的方法?

我尝试过共享 y 轴,但未能成功为一个图采用两种不同类型的格式。
import matplotlib.pyplot as plt
import numpy as np
theta = np.linspace(0,(np.pi)/2)
r = np.sin(theta)
fig = plt.figure()
ax = fig.add_subplot(211, polar=True)
c = ax.scatter(theta, r, c=r, s=5, cmap='hsv', alpha=0.85)
ax.set_thetamin(0)
ax.set_thetamax(90)
ax1=fig.add_subplot(212) #, sharey='ax')
fig, (c, d) = plt.subplots(ncols=2,sharey=True)
d=ax1.scatter(theta,r)
plt.show()
Run Code Online (Sandbox Code Playgroud) matplotlib ×6
python ×5
plot ×3
math ×2
axis-labels ×1
cartesian ×1
geometry ×1
ggplot2 ×1
imshow ×1
matlab ×1
python-3.x ×1
r ×1
rgb ×1
rotation ×1
subplot ×1