|
|
2
The Data Scientician
6 年前
首先,我认为您可能会受益于
那么,让我们来分解目标:我不太清楚你想做什么,但我假设你想得到这样的东西
(
source,page 14
))
要渲染类似的东西,您需要能够渲染在极坐标中显示为半圆形的水平线。然后,将水平线映射到极坐标图就成了问题。
首先,请注意,您的半径在这一行中没有规格化:
如果极坐标:
icoord,dcord=笛卡尔_to_polar(icoord,dcord)
< /代码>
您可以通过简单地重新映射
icoord
to[0;2pi]来规范化它们。
现在,让我们试着画一些更简单的图,而不是复杂的图:
icoord,dcord=np.meshgrid(np.r_[1:10],np.r_[1:4])
#绘制笛卡尔版本
绘图树图(icoord,dcord,figsize=(8,3),polar=false)
#绘制极坐标
绘图树图(icoord,dcord,figsize=(5,5),polar=true)
< /代码>
结果如下:
正如你所看到的,极坐标代码并没有将水平线映射到半圆形,因此这是行不通的。让我们试试plt.polar instead:。
plt.polar(icoord.t,dcord.t)
< /代码>
产生
这更像是我们需要的。我们需要先确定角度,然后考虑Y坐标向内(你可能希望它从中心到边界)。归根结底就是这个
nic=(icoord.t-icoord.min())/(icoord.max()-icoord.min())
极性PLT(2*np.pi*nic,-dcord.t)
< /代码>
它产生了以下
这和你需要的相似。请注意,直线保持笔直,不会被弧替换,因此您可能需要在for循环中对其重新采样。
此外,您还可以从单色和对数刻度中获益,使阅读更容易。
plt.subflots(figsize=(10,10))。
ico=(icoord.t-icoord.min())/(icoord.max()-icoord.min())
plt.polar(2*np.pi*ico,-np.log(dcord.t),'b')
< /代码>
.
那么,让我们把目标分解一下:我不太清楚你想做什么,但我假设你想得到这样的东西
(source, page 14)
要渲染类似的东西,您需要能够渲染在极坐标中显示为半圆形的水平线。然后,将水平线映射到极坐标图。
首先,请注意,您的半径在这一行中没有标准化:
if polar:
icoord, dcoord = cartesian_to_polar(icoord, dcoord)
您可以通过简单地重新映射来规范化它们icoord 至(0;2PI)。
现在,让我们尝试绘制更简单的图,而不是复杂的图:
icoord, dcoord = np.meshgrid(np.r_[1:10], np.r_[1:4])
# Plot the cartesian version
plot_dendrogram(icoord, dcoord, figsize=(8, 3), polar=False)
# Plot the polar version
plot_dendrogram(icoord, dcoord, figsize=(5, 5), polar=True)
结果如下:
正如你所看到的,极坐标代码并没有将水平线映射到半圆形,因此这是行不通的。让我们一起尝试plt.polar 而是:
plt.polar(icoord.T, dcoord.T)
生产
这更像是我们需要的。我们需要先确定角度,然后考虑Y坐标向内(你可能希望它从中心到边界)。归根结底就是这个
nic = (icoord.T - icoord.min()) / (icoord.max() - icoord.min())
plt.polar(2 * np.pi * nic, -dcoord.T)
它产生了以下
这和你需要的相似。请注意,直线保持直线,不会被圆弧替换,因此您可能需要在for循环中对其重新采样。
此外,您还可以从单色和对数刻度中获益,使阅读更容易。
plt.subplots(figsize=(10, 10))
ico = (icoord.T - icoord.min()) / (icoord.max() - icoord.min())
plt.polar(2 * np.pi * ico, -np.log(dcoord.T), 'b')
|