我有一组3个数据集,我想在MATLAB中绘制,但是'x'轴,我想以圆形而不是直底线形式给出.有什么想法怎么做?
一个示例图:
alt text http://img526.imageshack.us/img526/5420/busvoltageplot.jpg
在MATLAB中绘制的正常命令是plot(x, data1, x data2, x, data3),x轴被视为直线.我希望x轴取圆圈.有没有人知道它的命令.
我在Matplotlib中更改轴标签时遇到问题.我想更改Polar Plot中的径向轴选项.
基本上,我正在计算圆柱体的扭曲,这只是半径偏离原始(完全圆形)圆柱体的多少.一些失真值是负的,而一些是由于拉伸和压缩力而为正.我正在寻找一种以图形方式在圆柱坐标中表示这种情况的方法,所以我认为极地情节是我最好的选择.Excel为我提供了一个"雷达图表"选项,该选项足够灵活,可以指定最小和最大径向轴值.我想使用Matplotlib在Python上复制它.
我用于绘制极坐标的Python脚本如下.
#!usr/bin/env python
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(-180.0,190.0,10)
theta = (np.pi/180.0 )*x # in radians
offset = 2.0
R1 = [-0.358,-0.483,-0.479,-0.346,-0.121,0.137,0.358,0.483,0.479,0.346,0.121,\
-0.137,-0.358,-0.483,-0.479,-0.346,-0.121,0.137,0.358,0.483,0.479,0.346,0.121,\
-0.137,-0.358,-0.483,-0.479,-0.346,-0.121,0.137,0.358,0.483,0.479,0.346,0.121,\
-0.137,-0.358]
fig1 = plt.figure()
ax1 = fig1.add_axes([0.1,0.1,0.8,0.8],polar=True)
ax1.set_rmax(1)
ax1.plot(theta,R1,lw=2.5)
Run Code Online (Sandbox Code Playgroud)
我的情节如下: 
但这不是我想要呈现它的方式.我想改变我的径向轴,以便我可以将数据显示为偏离某个参考值,比如说-2.如何在极坐标中询问Matplotlib更改最小轴标签?我可以在Excel中轻松完成这项工作.我选择最小径向值为-2,以获得以下Excel雷达图:

在Python上,我可以轻松地将输入数据偏移量为2.我的新数据集称为R2,如下所示:
#!usr/bin/env python
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(-180.0,190.0,10)
theta = (np.pi/180.0 )*x # in radians
offset = 2.0
R2 = [1.642,1.517,1.521,1.654,1.879,2.137,2.358,2.483,2.479,2.346,2.121,1.863,\
1.642,1.517,1.521,1.654,1.879,2.137,2.358,2.483,2.479,2.346,2.121,1.863,1.642,\
1.517,1.521,1.654,1.879,2.137,2.358,2.483,2.479,2.346,2.121,1.863,1.642]
fig2 = plt.figure()
ax2 = fig2.add_axes([0.1,0.1,0.8,0.8],polar=True)
ax2.plot(theta,R2,lw=2.5)
ax2.set_rmax(1.5*offset) …Run Code Online (Sandbox Code Playgroud) 我将信号的相位从0度改变到360度,以获得最大电压值.因为如果我改变信号的相位,电压也会改变.我有找到最大值的代码.
void Maxphase(float *max, unsigned int *index)
{
*max = 0.0;
float value;
unsigned int i, data;
for (i=0;i<=360;i++)
{
phaseset(i);
delay_ms(100);
data = readvalue();
value = voltage(mux1);
if(value > *max) //find max value
{
*max = value; //max voltage
*index = i;
}
}
}
Run Code Online (Sandbox Code Playgroud)
从上面的代码我得到38秒(360*100)后的最大值(电压),因为对于每次读取操作,我的设备需要100ms延迟.这太大了,我无法改变硬件因此我希望通过优化软件在2到3秒内获得最大值.然后我尝试了以下代码.
void Maxphase(float *max1, unsigned int *index1)
{
max = 0.0;
float value;
unsigned int i,j,data;
for (i=0;i<=360;i+=10)
{
phaseset(i);
delay_ms(100);
data = readvalue();
value = voltage(mux1);
if(value > max) //find max value
{ …Run Code Online (Sandbox Code Playgroud) 假设(x(t),y(t))具有极坐标(√t,2πt).绘图(x(t),y(t))为t∈[0,10].
R中没有适当的功能用极坐标绘图.我通过给出x =√t&y =2πt尝试了正常的情节.但结果图并不像预期的那样.
我从"使用r进行科学编程和模拟的介绍"中得到了这个问题,书中说的是情节应该是螺旋式的.
import numpy as np
import seaborn as sbs
import matplotlib.pyplot as plt
r = np.arange(0, 3.0, 0.01)
theta = 2 * np.pi * r
ax = plt.subplot(111, polar=True)
ax.plot(theta, r, color='r', linewidth=3)
ax.set_rmax(2.0)
ax.grid(True)
ax.set_title("A line plot on a polar axis", va='bottom')
plt.show()
Run Code Online (Sandbox Code Playgroud)

如何将径向刻度标签(0.5,1.0,1.5,2.0)移动到不同的角度,比如120度?
假设我有以下极坐标图:
a=-0.49+1j*1.14
plt.polar([0,angle(x)],[0,abs(x)],linewidth=5)
Run Code Online (Sandbox Code Playgroud)

我想将径向限制调整为 0 到 2。
做这个的最好方式是什么?
请注意,我是专门询问该plt.polar()方法(而不是polar=True在类似问题中常见的正常图中使用参数)。
这似乎有效,除非我从控制台(Spyder、Win7)进行绘图:
>>> ax=plt.gca()
>>> ax.set_rlim(0,2)
Run Code Online (Sandbox Code Playgroud) 这不起作用:
df[df['angle'] < 0]] += 360
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?我需要一个已经存在的熊猫数据框,其中负角和正角更新为正极坐标角(0 到 360 度)。
有:
[-135, -90, -45, 180, 135, 90, 45, 0, etc... ] # polar 'angles' in degrees (with negatives)
Run Code Online (Sandbox Code Playgroud)
想:
[315, 270, 225, 180, 135, 90, 45, 0, etc... ] # polar 'angles' in degrees (positive only)
Run Code Online (Sandbox Code Playgroud)
// 编辑(响应)://////////////////////////////////////// ///////////////////////////////////////////////// ///////////////////////////////
这一行df[df['angle'] < 0]] += 360给出了一个类型错误:
“类型错误:无法操作 360,块值必须是 str,而不是浮点数。”
数据框'angle'的信息为:
“名称:角度,dtype:in64,
我使用的原始“蛮力”解决方案是:
for i in range(len(df['angle'])):
if df['angle'][i] < 0:
df['angle'][i] += 360
Run Code Online (Sandbox Code Playgroud)
这有效,但速度很慢,并给出警告,然后告诉我查找有关数据帧索引的文档。
我试图弄清楚如何在极坐标图中的两点之间创建圆弧,但我绘制的线是连接它们的直线,即使该图是极坐标的。
我需要使用不同的绘图函数来代替吗ax.plot?
我注意到有些补丁matplotlib可能是我应该使用的,但我不确定如何以这种方式添加它们。
如何在极坐标图上从 A 点和 B 点绘制一条曲线?
# Create polar plot object
with plt.style.context("seaborn-white"):
fig = plt.figure(figsize=(5,5))
ax = fig.add_subplot(111, projection="polar")
# Draw 3 lines
for degree in [90, 210, 330]:
rad = np.deg2rad(degree)
ax.plot([rad,rad], [0,1], color="black", linewidth=2)
# Connect two points with a curve
for curve in [[[90, 210], [0.5, 0.8]]]:
curve[0] = np.deg2rad(curve[0])
ax.plot(curve[0], curve[1])
Run Code Online (Sandbox Code Playgroud)
我想用来ggplot画一个圆,然后在里面散点。我有代码(从这个答案中采用)让我非常接近我想要的。但是,我希望点随机散布在圆圈内,但现在我在中心周围出现了一个不需要的簇。
我看到了一个类似的 SO question and answer,但它是在 c# 中,我不明白如何使其适应R代码。
下面的代码定义了一个自定义的可视化函数vis_points_inside_circle(),然后调用了4次,给出了4个使用我当前方法可视化的例子。
library(ggplot2)
library(ggforce)
## set up function
vis_points_inside_circle <- function(n) {
# part 1 -- set up empty circle
df_empty_circle <-
data.frame(x = 0,
y = 0,
r = 1)
p_empty_circle <-
ggplot(df_empty_circle) +
geom_circle(aes(x0 = x, y0 = y, r = r)) +
coord_fixed() +
theme_void()
# part 2 -- set up points scatter
r <- runif(n)
th …Run Code Online (Sandbox Code Playgroud) matplotlib ×4
python ×4
plot ×3
r ×2
axis-labels ×1
c ×1
figure ×1
geometry ×1
ggplot2 ×1
matlab ×1
numpy ×1
pandas ×1
python-3.x ×1
trigonometry ×1
uiimage ×1