python画玫瑰图_央视都在用的“南丁格尔玫瑰图”,原来Python也可以画
前一陣子,我看到央視新聞中,有一張比較好看數(shù)據(jù)圖,如下:
后來才知道這叫“南丁格爾玫瑰圖”,是南丁格爾護(hù)士在克里米亞戰(zhàn)爭期間提交的一份關(guān)于士兵死傷報告時發(fā)明的一種圖表。
我心想能不能用Python也畫一個,就去網(wǎng)上搜了一些資料,然后自己搗鼓了一下代碼,并進(jìn)行了梳理,下面是具體步驟。
第一步:安裝并導(dǎo)入相關(guān)包
主要用到了pandas和pyecharts這兩個包,需要注意的是pyecharts不同版本之間的的代碼可能稍有不同,我這里安裝的最新版,也就是1.7.1
pip install pandaspip install pyecharts
安裝完成后導(dǎo)入:
import pandas as pdfrom pyecharts.charts import Piefrom pyecharts import options as opts
第二步:讀取數(shù)據(jù)
我數(shù)據(jù)放在Excel中,內(nèi)容與上文央視新聞的數(shù)據(jù)一樣,是3月11日前最后一次確診新冠肺炎病例連續(xù)零新增的天數(shù),共計25個省市區(qū),如下:
data.xlsx
用pandas讀取數(shù)據(jù):
data = pd.read_excel("data.xlsx")data.sort_values(by="天數(shù)", ascending=False, inplace=True)province = data["省區(qū)市"].values.tolist()days = data["天數(shù)"].values.tolist()
其中第二行代碼的作用是將數(shù)據(jù)降序排列,如果各位事先在Excel中排好序了,就沒必要寫第二行代碼。
之所以要降序,是因為最后生成的圖的數(shù)據(jù)順序,與原數(shù)據(jù)順序是一致的,降序后畫出來的南丁格爾玫瑰圖更加直觀。
第三步:設(shè)置顏色序列
南丁格爾玫瑰圖是否好看與其顏色十分相關(guān),我們要事先給定每個數(shù)據(jù)想呈現(xiàn)的顏色,并且盡量讓它們過渡的自然些。
color_series = ["#faeb23", "#e8e517", "#c9db33", "#9fcb3d", "#6bbe45", "#37b64b", "#3db979", "#11adcf", "#1f9bca", "#1d8fc6", "#2d6da4", "#26539e", "#2a3780", "#423787", "#69398d", "#7d3a93", "#913986", "#cf208f", "#ea257e", "#eb2462", "#ee3131", "#f1562f", "#f67932", "#f89230", "#e2a924"]
第四步:實例化Pie類
因為主要用到了pyecharts中Pie這個類,所以要先實例化它:
pie = Pie(init_opts=opts.InitOpts(width="1350px", height="900px"))pie.set_colors(color_series)pie.add("", [z for z in zip(province, days)], radius=["30%", "120%"], center=["50%", "66%"], rosetype="area")
radius:半徑大小,數(shù)組的第一項是內(nèi)半徑,第二項是外半徑,默認(rèn)為 [0, 75],如果寫百分比就是寬高的尺寸乘以百分比
center:中心坐標(biāo),數(shù)組的第一項是橫坐標(biāo),第二項是縱坐標(biāo),默認(rèn)為 [50, 50]
rosetype:使用南丁格爾玫瑰圖,并選用模式,有radius和area兩種模式。默認(rèn)為radius。radius:扇區(qū)圓心角展現(xiàn)數(shù)據(jù)的百分比,半徑展現(xiàn)數(shù)據(jù)的大小;area:所有扇區(qū)圓心角相同,僅通過半徑展現(xiàn)數(shù)據(jù)大小。
第五步:設(shè)置全局配置
pie.set_global_opts(title_opts=opts.TitleOpts(title="多個省區(qū)市\(zhòng)n確診病例連續(xù)多日", subtitle="零新增", title_textstyle_opts=opts.TextStyleOpts(font_size=32, color="#0c2a46", font_family="KaiTi", font_weight="bold"), subtitle_textstyle_opts=opts.TextStyleOpts(font_size=66, color="#0c2a46", font_family="KaiTi", font_weight="bold"), pos_right="center", pos_left="center", pos_top="58%", pos_bottom="center"), legend_opts=opts.LegendOpts(is_show=True), toolbox_opts=opts.ToolboxOpts(pos_top="5%"))title_opts:主副標(biāo)題的樣式設(shè)置,這里面的內(nèi)容看上去比較多,其實大家自己試一下就知道了,類似于CSS,對標(biāo)題的大小、顏色、字體、是否加粗、位置信息進(jìn)行設(shè)置。
legend_opts:是否顯示圖例。
toolbox_opts:顯示工具盒,并對其顯示的位置進(jìn)行設(shè)置。
這里不知道圖例和工具盒是啥也沒關(guān)系,等看到本文最后生成的圖就知道啦。
第六步:設(shè)置系列配置項
pie.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="inside", font_size=16, formatter="\n{c}天", font_style="normal", font_weight="bold", font_family="SimHei"))
這些參數(shù)看上去復(fù)雜,其實就是對每個扇形里面的文字樣式進(jìn)行設(shè)置,就不解釋了。
第七步:生成html文件
pie.render("南丁格爾玫瑰圖.html")
將上面的代碼運(yùn)行后,就會生成一個html文件,打開后如下:
南丁格爾玫瑰圖.html
總結(jié)
以上是生活随笔為你收集整理的python画玫瑰图_央视都在用的“南丁格尔玫瑰图”,原来Python也可以画的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工作感言正能量一句话句句精辟
- 下一篇: 双侧输卵管堵塞可以治好吗