簡體   English   中英

Python matplotlib 極坐標未按預期繪制

[英]Python matplotlib polar coordinate is not plotting as it is supposed to be

我正在從包含笛卡爾坐標的 CSV 文件中繪制,我想將其更改為極坐標,然后使用極坐標將其更改為 plot。

這是代碼

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import seaborn as sns

df = pd.read_csv('test_for_plotting.csv',index_col = 0)

x_temp = df['x'].values
y_temp = df['y'].values

df['radius'] =  np.sqrt( np.power(x_temp,2) + np.power(y_temp,2) )
df['theta'] = np.arctan2(y_temp,x_temp)
df['degrees'] = np.degrees(df['theta'].values)
df['radians'] = np.radians(df['degrees'].values)

ax = plt.axes(polar = True)
ax.set_aspect('equal')
ax.axis("off")

sns.set(rc={'axes.facecolor':'white', 'figure.facecolor':'white','figure.figsize':(10,10)})
# sns.scatterplot(data = df, x = 'x',y = 'y', s= 1,alpha = 0.1, color = 'black',ax = ax)
sns.scatterplot(data = df, x = 'radians',y = 'radius', s= 1,alpha = 0.1, color = 'black',ax = ax)

plt.tight_layout()
plt.show()

這是數據集

如果您使用polar = False運行此命令並將此行用於 plot sns.scatterplot(data = df, x = 'x',y = 'y', s= 1,alpha = 0.1, color = 'black',ax = ax)它會導致這張圖片圖片

現在設置polar = True並將這條線運行到 plot sns.scatterplot(data = df, x = 'radians',y = 'radius', s= 1,alpha = 0.1, color = 'black',ax = ax)supposed給你這個陰謀

但它不起作用,就像您運行實際代碼一樣,極坐標格式的形狀與笛卡爾格式相同,這沒有意義,並且與我向您展示的極坐標圖片不匹配(如果您想知道我從哪里得到第二張圖片,我用 R 繪制的)

感謝您的幫助和見解,並在此先感謝!

對於極坐標 plot,“x 軸”以弧度表示角度。 因此,您需要切換 x 和 y,並將角度轉換為弧度(我還添加了ax=ax ,因為軸是明確創建的):

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import seaborn as sns

data = {'radius': [0, 0.5, 1, 1.5, 2, 2.5], 'degrees': [0, 25, 75, 155, 245, 335]}

df_temp = pd.DataFrame(data)
ax = plt.axes(polar=True)
sns.scatterplot(x=np.radians(df_temp['degrees']), y=df_temp['radius'].to_numpy(),
                s=100, alpha=1, color='black', ax=ax)
for deg, y in zip(df_temp['degrees'], df_temp['radius']):
    x = np.radians(deg)
    ax.axvline(x, color='skyblue', ls=':')
    ax.text(x, y, f'  {deg}', color='crimson')
ax.set_rlabel_position(-15)  # Move radial labels away from plotted dots
plt.tight_layout()
plt.show()

極坐標散點圖

About your new question: if you have an xy plot, and you convert these xy values to polar coordinates, and then plot these on a polar plot, you'll get again the same plot.

After some more testing with the data, I decided to create the plot directly with matplotlib, as seaborn makes some changes that don't have exactly equal effects across seaborn and matplotlib versions.

R 中似乎發生了什么:

  • 角度(由“x”給出)展開以填充范圍(0,2 pi)。 這要么需要重新縮放 x,要么更改 x 值映射到角度的方式。 一種方法是減去最小值。 結果除以新的最大值並乘以 2 pi。
  • 頂部的角度為 0,順時針方向的角度為 go。

以下代碼應使用 Python 創建 plot。 您可能想在分散 plot 選項中使用alphas進行試驗。 (默認散點會得到一個輪廓,這在處理非常小的點時通常是不需要的,可以通過lw=0刪除。)

ax = plt.axes(polar=True)
ax.set_aspect('equal')
ax.axis('off')
x_temp = df['x'].to_numpy()
y_temp = df['y'].to_numpy()
x_temp -= x_temp.min()
x_temp = x_temp / x_temp.max() * 2 * np.pi
ax.scatter(x=x_temp, y=y_temp, s=0.05, alpha=1, color='black', lw=0)
ax.set_rlim(y_temp.min(), y_temp.max())
ax.set_theta_zero_location("N")  # set zero at the north (top)
ax.set_theta_direction(-1) # go clockwise
plt.show()

在左側生成圖像,在右側使用 y 值進行着色( ax.scatter(..., c=y_temp, s=0.05, alpha=1, cmap='plasma_r', lw=0) ):

類似於 R 圖的極坐標圖

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM