我是SVG的初学者,但我想学习一些技巧.
简而言之,是否有一种简单的方法来创建这样的东西?

我正在考虑创建一个极性渐变然后剪切它:

但是如何生成极性梯度?
即使没有原生方法,也许可以用简单的线性渐变进行,然后使用一些矩形极坐标变换.有办法吗?
如何在图上组合网格化极坐标和笛卡尔坐标数据?
重要的是要注意轴的起点和比例必须匹配.
在我的应用中,我想将天气雷达数据(极地)与高程数据(笛卡尔)结合起来.
这是出发点:

我有点卡住了。我正在尝试实现基本的极坐标到矩形的转换,以匹配Photoshop的转换,但是我没有得到相同的结果。
从矩形转换为极性匹配与Photoshop匹配,但从极性转换为矩形却不匹配。
您可以在这张图中看到Photoshop和我的之间的区别:

float a, b, ang, dist;
int px, py;
const PI=3.141592653589793;
// Convert from cartesian to polar
for (y=y_start; y<y_end; ++y)
{
for (x=x_start; x<x_end; ++x)
{
a = (float)(x-X/2);
b = (float)(y-Y/2);
dist = (sqr(a*a + b*b)*2.0);
ang = atan2(b,-a)*(58);
ang = fmod(ang + 450.0,360.0);
px = (int)(ang*X/360.0);
py = (int)(dist);
pset(x, y, 0, src(px,py,0));
pset(x, y, 1, src(px,py,1));
pset(x, y, 2, src(px,py,2));
}
}
// Convert back to cartesian
for (y=y_start; y<y_end; ++y)
{
for (x=x_start; …Run Code Online (Sandbox Code Playgroud) 我有以下问题:我想在python的极坐标中绘制一些数据点,这很容易,使用一些代码
import numpy as np
import matplotlib.pyplot as plt
r = 1e04 * np.array([5.31,5.29,5.25,5.19,5.09,4.92,4.67,4.27,3.75,3.56])
theta = 2*np.pi/360 * np.array(list(range(0, 100, 10)))
plt.polar(theta, r, "ro")
plt.show()
Run Code Online (Sandbox Code Playgroud)
但我想添加错误栏,我找不到任何足够的解决方案.是否已经有一些prebuild matplotlib代码?或者有谁知道如何正确定义误差线?据我所知,r误差只是一条直线,而θ误差应该是一个圆的一部分.
我想使用以下数组为极坐标创建网格.
R = 1.15
r = numpy.linspace(R,5,100)
theta = numpy.linspace(0,2*numpy.pi,145)
Run Code Online (Sandbox Code Playgroud)
我试过这种方式,使用numpy:
X,Y=numpy.meshgrid(r*numpy.cos(theta),r*numpy.sin(theta))
Run Code Online (Sandbox Code Playgroud)
但我收到这个错误:
ValueError: operands could not be broadcast together with shapes (100,) (145,)
Run Code Online (Sandbox Code Playgroud)
如何生成网格并显示点?
当ggplot使用极坐标绘制线图时,它会在最高和最低x值(Dec及Jan以下)之间留下间隙,而不是缠绕成螺旋线.我怎样才能继续这条线并缩小差距?
特别是,我想使用月份作为我的x轴,但在一个循环线中绘制多年的数据.
Reprex:
library(ggplot2)
# three years of monthly data
df <- expand.grid(month = month.abb, year = 2014:2016)
df$value <- seq_along(df$year)
head(df)
## month year value
## 1 Jan 2014 1
## 2 Feb 2014 2
## 3 Mar 2014 3
## 4 Apr 2014 4
## 5 May 2014 5
## 6 Jun 2014 6
ggplot(df, aes(month, value, group = year)) +
geom_line() +
coord_polar()
Run Code Online (Sandbox Code Playgroud)
我试图在 matplotlib 中将一整年的数据绘制为极坐标图,但无法找到任何此类示例。我设法根据这个线程转换了熊猫的日期,但我无法将我的头围绕(几乎)y 轴或 theta。
这是我走了多远:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd
times = pd.date_range("01/01/2016", "12/31/2016")
rand_nums = np.random.rand(len(times),1)
df = pd.DataFrame(index=times, data=rand_nums, columns=['A'])
ax = plt.subplot(projection='polar')
ax.set_theta_direction(-1)
ax.set_theta_zero_location("N")
ax.plot(mdates.date2num(df.index.to_pydatetime()), df['A'])
plt.show()
Run Code Online (Sandbox Code Playgroud)
这给了我这个情节:

减少日期范围以了解发生了什么
times = pd.date_range("01/01/2016", "01/05/2016")我得到了这个图:

我认为该系列的开头在 90 到 135 之间,但是我如何“重新映射”它以便我的年份日期范围在北原点开始和结束?
下面的代码有效,但我认为每个重复周期都会过度绘制原始点。我希望它从原点开始,每个重复循环,有一个清晰的情节。在许多解决此问题的方法中,我尝试在 init 和 update 函数中插入 ax.clear();没有效果。我在代码中留下了我认为会重置 ln,艺术家的内容;同样,这不是我正在寻找的解决方案。我会很感激在这个玩具示例中重新启动每个循环的正确方法是什么的一些指导,以便在应用于我更复杂的问题时,我不会招致累积处罚。如果传递数组,这在刷新方面效果很好......感谢您的帮助。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation, writers
#from basic_units import radians
# # Set up formatting for the movie files
# Writer = writers['ffmpeg']
# writer = Writer(fps=20, metadata=dict(artist='Llew'), bitrate=1800)
#Polar stuff
fig = plt.figure(figsize=(10,8))
ax = plt.subplot(111,polar=True)
ax.set_title("A line plot on a polar axis", va='bottom')
ax.set_rticks([0.5, 1, 1.5, 2]) # fewer radial ticks
ax.set_facecolor(plt.cm.gray(.95))
ax.grid(True)
xT=plt.xticks()[0]
xL=['0',r'$\frac{\pi}{4}$',r'$\frac{\pi}{2}$',r'$\frac{3\pi}{4}$',\
r'$\pi$',r'$\frac{5\pi}{4}$',r'$\frac{3\pi}{2}$',r'$\frac{7\pi}{4}$']
plt.xticks(xT, xL)
r = []
theta = [] …Run Code Online (Sandbox Code Playgroud) 这是我的代码:
from matplotlib import pyplot as plt
dec = pd.read_csv('POLAR.txt', sep=" ", header=None, skiprows=1)
ra = [0,30,60,90,120,150,180,210,240,270,300,330]
ra = [x/180.0*np.pi for x in ra]
ax = plt.subplot(111, projection='polar')
plt.polar(ra, dec, 'ok')
plt.plot(ra,dec, data=ra , marker='o', color='olive', linewidth=2)
ax.set_yticklabels([])
Run Code Online (Sandbox Code Playgroud)
我仍然不确定如何连接最后一点和第一点。这就是我得到的:

我想知道如何用曲线连接这些点?有没有办法得到这个花生形图的方程?
matplotlib ×5
python ×5
plot ×2
animation ×1
c ×1
ggplot2 ×1
gradient ×1
graphics ×1
javascript ×1
layer ×1
math ×1
numpy ×1
r ×1
scatter-plot ×1
smoothing ×1
svg ×1
time-series ×1