Matplotlib极坐标线

戴夫L17

尝试在Matplotlib中使用线条(而不是线条)来创建风玫瑰。换句话说,我想要这样的东西(它是由Gnuplot创建的),其中线在整个长度上具有一致的粗细,并沿径向从原点延伸到风速(红色是最新的观测值,靛蓝为最高峰,年龄较大的Obs随着年龄的增长而变暗):

风玫瑰1

我能找到的最接近的是这个(请忽略除行之外的所有差异):

风玫瑰2

我尝试过的所有内容都以一种从原点“散开”的方式进行绘制-无论是条形,线条,箭头还是其他。这是情节线:

bars = ax.bar(wind_direction, wind_speed, width=.075, linewidth=0.1, edgecolor='black', zorder=3)

解决方案:

解决方案

由于@cphlewis的修复,这是创建所需图形(在此行上方)的完整代码。我尝试使用时的错误plot是在一个命令中绘制所有数据,而不是“ n”个图(分别绘制每行)。

#! /usr/bin/env python2.6
# -*- coding: utf-8 -*-

import csv
import numpy as np
import matplotlib.pyplot as plt

bar_colors     = ['#333333', '#444444', '#555555', '#666666', '#777777', '#888888', '#999999', 'red']
data_source    = '/Users/username/Dropbox/Public/charts.csv'
num_obs        = 8
final_data     = []
wind_direction = []
wind_speed     = []

# Get the data.
data_file = open(data_source, "r")
csv_data  = csv.reader(data_file, delimiter=',')
[final_data.append(item) for item in csv_data]
data_file.close()

# Grab the column headings for the labels, then delete the row from final_data.
xlabel = final_data[0][24]
ylabel = final_data[0][25]
final_data.pop(0)

# Create lists of data to plot (string -> float).
[wind_direction.append(float(item[24])) for item in final_data]
[wind_speed.append(float(item[25])) for item in final_data]

# Make them the desired length based on num_obs.
wind_direction = wind_direction[len(wind_direction)-num_obs:len(wind_direction)]
wind_speed     = wind_speed[len(wind_speed)-num_obs:len(wind_speed)]

# Polar plots are in radians (not degrees.)
wind_direction = np.radians(wind_direction)


wind = zip(wind_direction, wind_speed, bar_colors) # polar(theta,r)


# Customizations.
plt.figure(figsize=(3, 3))  # Size
ax = plt.subplot(111, polar=True)  # Create subplot
plt.grid(color='#888888')  # Color the grid
ax.set_theta_zero_location('N')  # Set zero to North
ax.set_theta_direction(-1)  # Reverse the rotation
ax.set_xticklabels(['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'], color='#666666', fontsize=8)  # Customize the xtick labels
ax.spines['polar'].set_visible(False)  # Show or hide the plot spine
ax.set_axis_bgcolor('#111111')  # Color the background of the plot area.

# Create the plot.
# Note: zorder of the plot must be >2.01 for the plot to be above the grid (the grid defaults to z=2.)
for w in wind:
    ax.plot((0, w[0]), (0, w[1]), color=w[2], linewidth=2, zorder=3)

# Right-size the grid (must be done after the plot), and customize the tick labels.
if max(wind_speed) <= 5:
    ax.yaxis.set_ticks(np.arange(1, 5, 1))
    ax.set_rgrids([1, 2, 3, 4, 5], angle=67, color='#FFFFFF', horizontalalignment='left', verticalalignment='center', fontsize=8)
elif 5 < max(wind_speed) <= 10:
    ax.yaxis.set_ticks(np.arange(2, 10, 2))
    ax.set_rgrids([2, 4, 6, 8, 10], angle=67, color='#FFFFFF', horizontalalignment='left', verticalalignment='center', fontsize=8)
elif 10 < max(wind_speed) <= 20:
    ax.yaxis.set_ticks(np.arange(5, 20, 5))
    ax.set_rgrids([5, 10, 15, 20], angle=67, color='#FFFFFF', horizontalalignment='left', verticalalignment='center', fontsize=8)
elif 20 < max(wind_speed) <= 50:
    ax.yaxis.set_ticks(np.arange(10, 50, 10))
    ax.set_rgrids([10, 20, 30, 40, 50], angle=67, color='#FFFFFF', horizontalalignment='left', verticalalignment='center', fontsize=8)
elif 50 < max(wind_speed):
    plt.text(0.5, 0.5, u'Holy crap!', color='white', horizontalalignment='center', verticalalignment='center', transform=ax.transAxes, bbox=dict(facecolor='red', alpha=0.5))

# Plot circles for current obs and max wind.
fig = plt.gcf()
max_wind_circle = plt.Circle((0, 0), max(wind_speed), transform=ax.transData._b, fill=False, edgecolor='indigo', linewidth=2, alpha=1, zorder=9)
fig.gca().add_artist(max_wind_circle)
last_wind_circle = plt.Circle((0, 0), wind_speed[num_obs-1], transform=ax.transData._b, fill=False, edgecolor='red', linewidth=2, alpha=1, zorder=10)
fig.gca().add_artist(last_wind_circle)

# If latest obs is a speed of zero, plot something that we can see.
if wind_speed[num_obs-1] == 0:
    zero_wind_circle = plt.Circle((0, 0), 0.1, transform=ax.transData._b, fill=False, edgecolor='red', alpha=1)
    fig.gca().add_artist(zero_wind_circle)

# Save it to a file.
plt.savefig('/Users/username/Desktop/wind.png', facecolor='black', edgecolor='none')

预计到达时间:CSV数据(我不再具有生成该图的确切数据;以下数据为近似值。)

wind_speed.csv

timestamp, wind speed
1970-01-01 00:00:00.000000,4
1970-01-01 01:00:00.000000,4
1970-01-01 02:00:00.000000,10
1970-01-01 03:00:00.000000,7
1970-01-01 04:00:00.000000,10
1970-01-01 05:00:00.000000,8
1970-01-01 06:00:00.000000,7
1970-01-01 07:00:00.000000,4

wind_dir.csv

timestamp,wind direction
1970-01-01 00:00:00.000000,1
1970-01-01 01:00:00.000000,260
1970-01-01 02:00:00.000000,267
1970-01-01 03:00:00.000000,267
1970-01-01 04:00:00.000000,269
1970-01-01 05:00:00.000000,300
1970-01-01 06:00:00.000000,190
1970-01-01 07:00:00.000000,269
ph鱼

您真正的问题是,如何用线而不是条形图绘制极坐标图?答:plot这样做的最小和完整示例:

#! /usr/bin/env python2.6
# -*- coding: utf-8 -*-

import csv
import numpy as np
import matplotlib.pyplot as plt

bar_colors     = ['#333333', '#444444', '#555555', '#666666', '#777777', '#888888', '#999999', '#AA0000']
num_obs        = len(bar_colors)

# Make up some data
wind_direction = (2*3.14)*(np.random.random_sample(num_obs))
wind_speed = 5 * np.random.random_sample(num_obs)
wind = zip(wind_direction, wind_speed, bar_colors) # polar(theta,r)

# Polar plotting
fig = plt.figure(figsize=(3, 3))  # Size
ax = plt.subplot(111, polar=True)  # Create subplot
plt.grid(color='#888888')  # Color the grid
ax.set_theta_zero_location('N')  # Set zero to North

for w in wind:
    #ax.plot(wind_speed, wind_direction, c = bar_colors, zorder = 3)
    ax.plot((0, w[0]), ( 0, w[1]), c = w[2], zorder = 3)

fig.show()

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Matplotlib绘制坐标线

来自分类Dev

matplotlib极坐标刻度/轴标签位置

来自分类Dev

matplotlib极坐标图设置标签位置

来自分类Dev

Matplotlib:极坐标图坐标轴刻度标签位置

来自分类Dev

极坐标坐标错误

来自分类Dev

在matplotlib极坐标图中设置theta-ticks

来自分类Dev

在matplotlib极坐标图上旋转theta = 0

来自分类Dev

在matplotlib中的极坐标图上移动径向刻度标签

来自分类Dev

在matplotlib中的极坐标投影上设置径向偏移

来自分类Dev

如何更改matplotlib极坐标图的“ r”轴位置?

来自分类Dev

Matplotlib-在极坐标图中绘制平滑圆

来自分类Dev

极坐标图多边形的Python / Matplotlib逆填充

来自分类Dev

极坐标图在matplotlib中给出了错误的角度

来自分类Dev

matplotlib中的散点图和组合极坐标直方图

来自分类Dev

Matplotlib极坐标图未在应绘制的位置绘制

来自分类Dev

matplotlib结合极坐标和笛卡尔网格数据

来自分类Dev

极坐标图多边形的Python / Matplotlib逆填充

来自分类Dev

如何在matplotlib中设置极坐标图的大小?

来自分类Dev

使用 matplotlib 的极坐标流图范围不好

来自分类Dev

Matplotlib 并使用极坐标投影去除子图之间的空白

来自分类Dev

如何在 matplotlib 中计算极坐标图密度

来自分类Dev

极坐标图中元素的matplotlib zorder叠加在笛卡尔坐标图上

来自分类Dev

极值极坐标图

来自分类Dev

极坐标图错误

来自分类Dev

创建极坐标直方图

来自分类Dev

极坐标图软件

来自分类Dev

创建极坐标直方图

来自分类Dev

极坐标图生成

来自分类Dev

Swift,极坐标