- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有很长的标识符,我想制作一个径向图,其中刻度线都处于不同的角度。例如,右侧 0 度处的第一个刻度应具有 0 度角。顶部的应该是 90 度。左边270度的应该是0度。我希望它看起来像径向树状图。使用 matplotlib 2.0.2
和 python 3.6.2
在 matplotlib 中是否可以旋转单个刻度标签或单独添加文本标签?
设置 ax.set_rticks([])
会在添加散点和散点线时扭曲绘图。 label.get_position()
中的位置将标签显着偏移到图的右侧。
有没有办法使用角度和振幅坐标?
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
data = {'0-b__|ce0Ji|aaaiIi9abGc_|ti5l-baa1tcciii|irGi': 0.28774963897009614, '0-b__|ce0Ji|aaaiIi9abGc_|ti6l-baa1tcciii|irGi': 0.18366735937444964, 'allb_e__|tla1a|ali|_auc7en_|e': -0.11720263463773731, 'b__0|lp|..ii80p.e7l_|an4obln.llll0ai|': -0.021168680215561269, 'b__Ass8._ii8.c4on|Ay|mbessoxiAxa': 0.17845443978725653, 'b__Bts4o_rrtiordae|Bei|obe7rattrniBno': 0.32077066676059313, 'b__|aaa|tteiatlim_|e1rblttaaeei|e': -0.27915536613715614, 'b__|as4.|ei2.l7ov_|e0tblaaoxi|xa': 0.43309499489274772, 'b__|as4.|ei2.l7ov_|e9tblaaoxi|xa': 0.47835581698425556, 'b__|cu|ppripcae_|co2tbopnccpei|': -0.20330386390053184, 'b__|eoea|cccimacnuuh_|ra0obarceenbi|ba': 0.062889648127927869, 'b__|oa|ggrigoip_|nr6ybmgvoohii|i': -0.045648268817583035, 'b__|p1|ooiioi4rs_|sr5eba0otsoi|ox': -0.52544820541720971, 'b__|paa|piatgn_|hy1cboippoli|la': 0.27260399422352155, 'b__|triu|mmriumay_|eb4ebcimrttnhi|hc': 0.62680074671550845, 'b__|tru|mmriumad_|eb2obcmittisi|': 0.34780388151174668, 'etob_m__|aol2l|ooeui|_lool7r': 0.4856468599203973, 'etpb_s__|apl2l|lleni|_loll8e': 0.24430277200521291, 'ib__rCalc_hhdiorchubai|CSt|absahodrsiCsaaca': -0.13484907188897891, 'nlab___|oa1i|ssni|_iesa9': 0.13636363636363635, 'nlnb_i__|dn1t|rrnfi|_tera8ig_|e': -0.056954668733049205, 'nrfb_h__|afl3r|ssnti|_resl3yn_': 0.56102285935683849, 'o5b__l|rcoa|eecialaeprh_|as1o5bie0trrnlii|irLa': 0.53377831002782572, 'oelb_a__Aelt3_rrovi__rro|a': 0.32230284245007218, 'oelb_a__Aelt4_rrovi__rro|a': 0.16580958754534889, 'porb_i__Ctrc6c_oopci__cloa|ny|C': 0.38260364199922509, 'porb_i__Ctrc7g_rrpci__glra|ay|C': 0.51829805219964076, 'ptab_a__|hac2b|uupci|_boui3ct_|': 0.50873516255151285, 'reab_a__|aa2a|rrrhi|_axrl4ra_|': -0.47742242259871087, 'sb__o|sSac|ccnibocsctlhd_|a0dbuacmssioai|anCca': 0.42733612764608503, 'teob___|oa1b|iiti|_bnil3': -0.32684653587404461, 'uoib_i__|ia2a|bbuli|_arbi2it': -0.13636363636363635}
Se_corr = pd.Series(data, name="correlation")
def plot_polar(r):
with plt.style.context("seaborn-whitegrid"):
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(111, polar=True)
ax.set_rmax(2)
# ax.set_rticks([])
ticks= np.linspace(0, 360, r.index.size + 1) [:-1]
ax.set_xticks(np.deg2rad(ticks))
ax.set_xticklabels(r.index, fontsize=15,)
angles = np.linspace(0,2*np.pi,len(ax.get_xticklabels()))
angles[np.cos(angles) < 0] = angles[np.cos(angles) < 0] + np.pi
angles = np.rad2deg(angles)
for i, theta in enumerate(angles):
ax.plot([theta,theta], [0,r[i]], color="black")
ax.scatter(x=theta,y=r[i], color="black")
labels = []
for label, theta in zip(ax.get_xticklabels(), angles):
x,y = label.get_position()
lab = ax.text(x, y, label.get_text(), transform=label.get_transform(),
ha=label.get_ha(), va=label.get_va())
lab.set_rotation(theta)
labels.append(lab)
ax.set_xticklabels([])
return fig, ax
fig,ax = plot_polar(Se_corr)
最佳答案
旋转极坐标图的刻度标签可能不像通常的笛卡尔图那样容易。对于笛卡尔图,可以简单地做类似的事情
for label in ax.get_xticklabels():
label.set_rotation(...)
这不适用于极坐标图,因为它们的旋转在绘制时重置为 0 度。
想到的一个选项是创建新的刻度标签作为附加文本对象,它复制刻度标签的属性但可以有一个持久的旋转。然后删除所有原始标记。
import numpy as np
import matplotlib.pyplot as plt
r = np.arange(0, 2, 0.01)
theta = 2 * np.pi * r
ax = plt.subplot(111, projection='polar')
ax.plot(theta, r)
ax.set_rmax(2)
ax.set_rticks([])
plt.gcf().canvas.draw()
angles = np.linspace(0,2*np.pi,len(ax.get_xticklabels())+1)
angles[np.cos(angles) < 0] = angles[np.cos(angles) < 0] + np.pi
angles = np.rad2deg(angles)
labels = []
for label, angle in zip(ax.get_xticklabels(), angles):
x,y = label.get_position()
lab = ax.text(x,y, label.get_text(), transform=label.get_transform(),
ha=label.get_ha(), va=label.get_va())
lab.set_rotation(angle)
labels.append(lab)
ax.set_xticklabels([])
plt.show()
对于较长的标签,您可以使用标签的 y
坐标:
import numpy as np
import matplotlib.pyplot as plt
r = np.arange(0, 2, 0.01)
theta = 2 * np.pi * r
ax = plt.subplot(111, projection='polar')
ax.plot(theta, r)
ax.set_rmax(2)
ax.set_rticks([])
ticks= np.linspace(0,360,9)[:-1]
ax.set_xticks(np.deg2rad(ticks))
ticklabels = ["".join(np.random.choice(list("ABCDE"),size=15)) for _ in range(len(ticks))]
ax.set_xticklabels(ticklabels, fontsize=10)
plt.gcf().canvas.draw()
angles = np.linspace(0,2*np.pi,len(ax.get_xticklabels())+1)
angles[np.cos(angles) < 0] = angles[np.cos(angles) < 0] + np.pi
angles = np.rad2deg(angles)
labels = []
for label, angle in zip(ax.get_xticklabels(), angles):
x,y = label.get_position()
lab = ax.text(x,y-.65, label.get_text(), transform=label.get_transform(),
ha=label.get_ha(), va=label.get_va())
lab.set_rotation(angle)
labels.append(lab)
ax.set_xticklabels([])
plt.subplots_adjust(top=0.68,bottom=0.32,left=0.05,right=0.95)
plt.show()
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
data = {'0-b__|ce0Ji|aaaiIi9abGc_|ti5l-baa1tcciii|irGi': 0.28774963897009614, '0-b__|ce0Ji|aaaiIi9abGc_|ti6l-baa1tcciii|irGi': 0.18366735937444964, 'allb_e__|tla1a|ali|_auc7en_|e': -0.11720263463773731, 'b__0|lp|..ii80p.e7l_|an4obln.llll0ai|': -0.021168680215561269, 'b__Ass8._ii8.c4on|Ay|mbessoxiAxa': 0.17845443978725653, 'b__Bts4o_rrtiordae|Bei|obe7rattrniBno': 0.32077066676059313, 'b__|aaa|tteiatlim_|e1rblttaaeei|e': -0.27915536613715614, 'b__|as4.|ei2.l7ov_|e0tblaaoxi|xa': 0.43309499489274772, 'b__|as4.|ei2.l7ov_|e9tblaaoxi|xa': 0.47835581698425556, 'b__|cu|ppripcae_|co2tbopnccpei|': -0.20330386390053184, 'b__|eoea|cccimacnuuh_|ra0obarceenbi|ba': 0.062889648127927869, 'b__|oa|ggrigoip_|nr6ybmgvoohii|i': -0.045648268817583035, 'b__|p1|ooiioi4rs_|sr5eba0otsoi|ox': -0.52544820541720971, 'b__|paa|piatgn_|hy1cboippoli|la': 0.27260399422352155, 'b__|triu|mmriumay_|eb4ebcimrttnhi|hc': 0.62680074671550845, 'b__|tru|mmriumad_|eb2obcmittisi|': 0.34780388151174668, 'etob_m__|aol2l|ooeui|_lool7r': 0.4856468599203973, 'etpb_s__|apl2l|lleni|_loll8e': 0.24430277200521291, 'ib__rCalc_hhdiorchubai|CSt|absahodrsiCsaaca': -0.13484907188897891, 'nlab___|oa1i|ssni|_iesa9': 0.13636363636363635, 'nlnb_i__|dn1t|rrnfi|_tera8ig_|e': -0.056954668733049205, 'nrfb_h__|afl3r|ssnti|_resl3yn_': 0.56102285935683849, 'o5b__l|rcoa|eecialaeprh_|as1o5bie0trrnlii|irLa': 0.53377831002782572, 'oelb_a__Aelt3_rrovi__rro|a': 0.32230284245007218, 'oelb_a__Aelt4_rrovi__rro|a': 0.16580958754534889, 'porb_i__Ctrc6c_oopci__cloa|ny|C': 0.38260364199922509, 'porb_i__Ctrc7g_rrpci__glra|ay|C': 0.51829805219964076, 'ptab_a__|hac2b|uupci|_boui3ct_|': 0.50873516255151285, 'reab_a__|aa2a|rrrhi|_axrl4ra_|': -0.47742242259871087, 'sb__o|sSac|ccnibocsctlhd_|a0dbuacmssioai|anCca': 0.42733612764608503, 'teob___|oa1b|iiti|_bnil3': -0.32684653587404461, 'uoib_i__|ia2a|bbuli|_arbi2it': -0.13636363636363635}
Se_corr = pd.Series(data, name="correlation")
def plot_polar(r):
with plt.style.context("seaborn-whitegrid"):
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(111, polar=True)
ax.set_rmax(2)
#ax.set_rticks([])
ticks= np.linspace(0, 360, r.index.size + 1)[:-1]
ax.set_xticks(np.deg2rad(ticks))
ax.set_xticklabels(r.index, fontsize=15,)
angles = np.linspace(0,2*np.pi,len(ax.get_xticklabels())+1)
angles[np.cos(angles) < 0] = angles[np.cos(angles) < 0] + np.pi
angles = np.rad2deg(angles)
for i, theta in enumerate(angles[:-1]):
ax.plot([theta,theta], [0,r[i]], color="black")
ax.scatter(x=theta,y=r[i], color="black")
fig.canvas.draw()
labels = []
for label, theta in zip(ax.get_xticklabels(), angles):
x,y = label.get_position()
lab = ax.text(x, y, label.get_text(), transform=label.get_transform(),
ha=label.get_ha(), va=label.get_va())
lab.set_rotation(theta)
labels.append(lab)
ax.set_xticklabels([])
return fig, ax
fig,ax = plot_polar(Se_corr)
plt.show()
关于python - 如何在极坐标 matplotlib 图中旋转刻度标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46719340/
我正在处理一组标记为 160 个组的 173k 点。我想通过合并最接近的(到 9 或 10 个组)来减少组/集群的数量。我搜索过 sklearn 或类似的库,但没有成功。 我猜它只是通过 knn 聚类
我有一个扁平数字列表,这些数字逻辑上以 3 为一组,其中每个三元组是 (number, __ignored, flag[0 or 1]),例如: [7,56,1, 8,0,0, 2,0,0, 6,1,
我正在使用 pipenv 来管理我的包。我想编写一个 python 脚本来调用另一个使用不同虚拟环境(VE)的 python 脚本。 如何运行使用 VE1 的 python 脚本 1 并调用另一个 p
假设我有一个文件 script.py 位于 path = "foo/bar/script.py"。我正在寻找一种在 Python 中通过函数 execute_script() 从我的主要 Python
这听起来像是谜语或笑话,但实际上我还没有找到这个问题的答案。 问题到底是什么? 我想运行 2 个脚本。在第一个脚本中,我调用另一个脚本,但我希望它们继续并行,而不是在两个单独的线程中。主要是我不希望第
我有一个带有 python 2.5.5 的软件。我想发送一个命令,该命令将在 python 2.7.5 中启动一个脚本,然后继续执行该脚本。 我试过用 #!python2.7.5 和http://re
我在 python 命令行(使用 python 2.7)中,并尝试运行 Python 脚本。我的操作系统是 Windows 7。我已将我的目录设置为包含我所有脚本的文件夹,使用: os.chdir("
剧透:部分解决(见最后)。 以下是使用 Python 嵌入的代码示例: #include int main(int argc, char** argv) { Py_SetPythonHome
假设我有以下列表,对应于及时的股票价格: prices = [1, 3, 7, 10, 9, 8, 5, 3, 6, 8, 12, 9, 6, 10, 13, 8, 4, 11] 我想确定以下总体上最
所以我试图在选择某个单选按钮时更改此框架的背景。 我的框架位于一个类中,并且单选按钮的功能位于该类之外。 (这样我就可以在所有其他框架上调用它们。) 问题是每当我选择单选按钮时都会出现以下错误: co
我正在尝试将字符串与 python 中的正则表达式进行比较,如下所示, #!/usr/bin/env python3 import re str1 = "Expecting property name
考虑以下原型(prototype) Boost.Python 模块,该模块从单独的 C++ 头文件中引入类“D”。 /* file: a/b.cpp */ BOOST_PYTHON_MODULE(c)
如何编写一个程序来“识别函数调用的行号?” python 检查模块提供了定位行号的选项,但是, def di(): return inspect.currentframe().f_back.f_l
我已经使用 macports 安装了 Python 2.7,并且由于我的 $PATH 变量,这就是我输入 $ python 时得到的变量。然而,virtualenv 默认使用 Python 2.6,除
我只想问如何加快 python 上的 re.search 速度。 我有一个很长的字符串行,长度为 176861(即带有一些符号的字母数字字符),我使用此函数测试了该行以进行研究: def getExe
list1= [u'%app%%General%%Council%', u'%people%', u'%people%%Regional%%Council%%Mandate%', u'%ppp%%Ge
这个问题在这里已经有了答案: Is it Pythonic to use list comprehensions for just side effects? (7 个答案) 关闭 4 个月前。 告
我想用 Python 将两个列表组合成一个列表,方法如下: a = [1,1,1,2,2,2,3,3,3,3] b= ["Sun", "is", "bright", "June","and" ,"Ju
我正在运行带有最新 Boost 发行版 (1.55.0) 的 Mac OS X 10.8.4 (Darwin 12.4.0)。我正在按照说明 here构建包含在我的发行版中的教程 Boost-Pyth
学习 Python,我正在尝试制作一个没有任何第 3 方库的网络抓取工具,这样过程对我来说并没有简化,而且我知道我在做什么。我浏览了一些在线资源,但所有这些都让我对某些事情感到困惑。 html 看起来
我是一名优秀的程序员,十分优秀!