You are viewing a single comment's thread from:

RE: Learn Python with Steem #10 #11 笔记

in #blog6 years ago

最后那种时间的windrose图弄不出来呀,报错报错,求救呀~

D:\Program Files\Miniconda3\lib\site-packages\matplotlib\patches.py:83: UserWarning: Setting the 'color' property will overridethe edgecolor or facecolor properties.
warnings.warn("Setting the 'color' property will override"

这个color要怎么用?? T T

Sort:  

这里是个警告,错误信息可能在其他地方。

我看你貼出來也有相關警告,但是你最後能出結果?

Posted using Partiko Android

结果有的,你的图是空白的?

多謝,明天我還搞不定就拿來看看😆

Posted using Partiko Android

还没看,但是根据你之前告诉我的修改,总算改对了,为什么说总算,因为新手的我看代码只能一知半解~
改完后能正常运行了,也没错误提示,就是不见图,虽然知道plt是能预览,但是我不知道具体要怎么做(感觉ax并没有和plt有关联起来),对于这个的参数也不熟悉,跑去github看别人的,确定少了句

plt.show()

哈哈哈,愉快的显示出来了,我表示我要稍微去了解下这两货!

文件我存了,非常感谢!图虽然画出来了,但是我怎么觉得和数据不对呐?
image.png
右边文字显示的是“时间”-“次数”
每一圈的数字(4.7、9.4、14.1、18.8、23.5)好像是半径,但是我没理解怎么算出来的,代表什么? T T~

确实不对!感谢提出来。

它默认划分为16个扇形,时间和角度没有对应,360/16=22.5°,扇形的位置有重合和偏差。
需要设置参数sector为:nsector=24

每一圈的数字(4.7、9.4、14.1、18.8、23.5)是半径(极坐标中的极径)。计算方法是:
在0到最大极径之间划分6等分,去掉其中的0,取其中5个数作为极径的标签。
在set_radii_angle(self, **kwargs)这个函数中是这么写的:

 N = 5
        rmax = self.get_rmax()
        radii = np.linspace(0, rmax, N + 1)
        if rmax % N == 0:
            fmt = "%d"
        else:
            fmt = "%.1f"
        radii_labels = [fmt % r for r in radii]
        # radii_labels[0] = ""  # Removing label 0
        self.set_rgrids(radii=radii[1:], labels=radii_labels[1:],
angle=self.radii_angle, **kwargs)

可以参照这个函数的计算方法,自己修改其标签为次数。

我得在文章中做些修正。非常感谢!

请教个问题“**kwargs”是什么变量或者参数?

count, _ = np.histogram(time, bins=24)

这句话我有点不理解‘,_’是什么?“count = np.histogram(time, bins=24)”这样的我可以理解,两种有什么区别?

"**kwargs"是个字典,接收长度可变的关键字参数。python可变参数的用法可以参考文章

np.histogram()这个函数的功能是计算直方图,它的返回值是个元组:

return n, bin_edges

所以用两个变量来接收这个函数的返回值。count, _ = np.histogram(time, bins=24)的意思相当于:将n赋值给count,bin_edges赋值给_,由于不需要用到bin_edges这个结果,就没给这个变量起有意义的名字,写了个下划线。

如果写成count = np.histogram(time, bins=24)的话,count会作为一个元组,包含两个数据:count = (n,bin_edges)

image.png

image.png

说下n,bin_edges的含义,n是一个列表,里面的值是各个直方的高度,也是频次;
bin_edges 也是一个列表,里面的数据表示每组数据的组距,每个直方的宽度,范围是左闭右开的,如上图:在[0,0.95833333)的范围内的数有1个,在[0.95833333,1.91666667)的范围内的数有1个......
但最后一组数据的范围是闭区间:在[22.04166667,23]的范围内的数有1个。

设置color 这个参数的目的是为了自定义每块三角形图像的颜色,也就是facecolor ,参数值是一个包含RGBA颜色值的元组,其中RGB的值表示颜色,A表示透明度,而(94, 79, 162)正好是这个颜色图片.png,这里没有设置透明度。

(94, 79, 162)是0~255范围的RGB值,但参数要求的RGB的值范围是0~1之间的,所以要将(94, 79, 162)每个数都除以255,这好像叫“归一化”吧。

查看帮助 可以看到 bar(direction, var, **kwargs) 并没有color这个参数,但是有colors这个参数,其中原因是我粗心漏写了个s,但又歪打正着达到了更改facecolor 的目的。

windrose 的功能实现用到了matplotlib这个库,除了windrose 文档里写的参数,还可以传递matplotlib.pyplot.plot支持的任何参数。color是其中一个,如果设置了color这个参数,会把facecolor ,edgecolor (边缘颜色)都设置为color的值,所以它给了条警告信息:“Setting the 'color' property will overridethe edgecolor or facecolor properties.”

facecolor 也是其中一个参数,如果直接设置facecolor 的值是不会生效的,因为windrose 在初始化时故意丢掉了这个参数,而把colors的参数值赋值给了facecolor。

也就是说要改变facecolor,正确的方法是设置colors这个参数。比如把原来的程序改成这样:

ax.bar(wd, ws, normed=True, bins=6,opening=0.8,colors='red',edgecolor='white')

或者:

ax.bar(wd, ws, normed=True, bins=6,opening=0.8,colors=[(94/255, 79/255, 162/255)]*6,edgecolor='white')

注意:如果colors的值是一个列表的话,设置colors的值时要符合bins的值,bins划分了多少个级别,colors里面就要多少个与之对应的颜色。

謝謝,看完了,明天繼續試,你一個帖子我看三天😂!另外今天碰到的坑主要在各種路徑上~有做出詞雲好開森,謝謝!

Posted using Partiko Android

这个得怪我写的不够详细😂

Posted using Partiko Android

应该是我不太熟悉脚本程序示范方式吧,找了下WordCloud参数资料,发现取图片的颜色作为绘制词云图片的颜色,直接在声明的时候用这个color_func参数就好了,不需要recolor了耶!
image.png

Coin Marketplace

STEEM 0.19
TRX 0.14
JST 0.030
BTC 60907.24
ETH 3249.66
USDT 1.00
SBD 2.45