Python-openpyxl教程10 - 图表布局,填充图案以及进阶图表

Python-openpyxl教程10 - 图表布局,填充图案以及进阶图表,第1张

可以通过使用布局类实例的layout属性来设置画布中图表的布局。

图表可以放置在其容器中。 x 和 y 调整位置, w 和 h 调整大小。单位是容器的比例。图表不能放置在其容器之外,并且宽度和高度是主要限制:如果 x + w > 1 , 则 x = 1 - w。

x是从左到右的水平位置

y是从顶部开始的垂直位置

h是图表相对于其容器的高度

w是盒子的宽度

除了大小和位置之外,相关属性的模式还可以设置为 factor 或 edge ,默认值是 factor 。

可以将layoutTarget设置为 outer 或 inner 。默认值为 outer 。

图例的位置可以通过设置它的位置进行控制 r , l , t , b 和 tr 分别控制右, 左, 顶部,底部。默认值为 r 。

或应用手动布局

整个数据系列和单个数据点可以通过 graphicalProperties 广泛地设置样式。把事情做好可能需要一些时间。

仪表图组合了一个饼图和一个环形图去创建一个"仪表"。第一个图表时包含四个切片的环形图,前三个切片与仪表的颜色相对应,第二个切片对应仪表的颜色。第四部分是甜甜圈的一半,不可见。

添加了包含三个切片的饼图。第一个和第三个切片是不可见的,因此第二个切片可以充当仪表上的指针。

使用数据系列中各个数据点的图形属性来完成效果。

图表工作表是一个只包含图表的特殊工作表。图表的所有数据必须在不同的工作表上。

Matplotlib 很复杂,但用其中的命令风格模块 pyplot 就够用了。基本上就在命令行敲敲命令就能出图。很简单,官网有个 tutorial 以及几个简练的 demo

Matplotlib 推荐安装 numpy (定义 array 或者 matrix), scipy (用不上 备着),以及 ipython(interactive Python cmd)。

iPython 集成了 numpy 和 matplotlibpyplot 用的时候不用导入那些模块。matplotlib 的 pyplot 教程也是基于此。

windows 下 直接安装以上几个 python 包的 binary 就 ok,环境变量设置一下,没啥折腾的。

最近受江苏疫情影响,好多小伙伴都居家办公咯!为了密切关注疫情动态,最近写了爬取疫情分布的脚本,参考上篇链接。

既然我们已经获得了相应的江苏各个地级市的疫情数据,那么我们如何来使用Python实现将数据可视化在地图上呢?

Apache Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了。

简单来说,pyecharts具有以下特性:

3 Pyecharts 安装

使用pip进行安装如下:

因为我们需要使用pycharts绘制地图,此时我们还需要安装相应的地图文件包:

其中:

echarts-countries-pypkg 包为全球国家地图

echarts-china-provinces-pypkg包为中国省级地图

echarts-china-cities-pypkg 包为中国市级地图

安装完上述绘制地图相关的python包后,我们接下来开始画疫情分布地图。

首先,我们先来查看一段Pyecharts相关实现:

上述代码解释如下:

运行后会在当前目录生成 map_jiangsu_0803html,用浏览器打开后结果如下:

当鼠标移动到对应区域后,会显示出对应地级市今日新增人数。

上述脚本虽然可以实现我们的功能,但是颜色灰灰的,太过于单调,接下来我们来想办法进行美化,实现代码如下:

代码解释如下:

运行后会在当前目录生成 map_jiangsu_0803_newhtml,用浏览器打开后结果如下:

同理我们可以得到现有确诊人数分布如下:

进而我们可以得到累计确诊人数分布如下:

本人在使用groovy爬取了全国3000+城市的历史天气之后,需要把每个城市的历史天气都绘制一张Time Series表格,用来反映各地的最高温最低温温差的变化曲线。这里遇到了一个问题,每次plotly绘制完图标总会调起系统浏览器打开呈现,一旦我批量生成N多张表格时,电脑就会卡死了。在使用中文作为文件名的时候遇到了一个错误,这个错误刚好能巧妙解决这个问题。在不同编码格式的字符拼接时文件路径时,会报错,报错内容如下:

'ascii' codec can't encode characters in position 69-70: ordinal not in range(128)

然后程序停止运行,但是文件已经生成了。在做了异常处理后,刚好能满足需求。关于python27的编码问题,并不是很了解为什么出这个错。有大神了解的可以分享一下。

python部分的代码如下:

#!/usr/bin/python

# coding=utf-8

from firstdate import DatePlot

import os

from secondMysqlFission import MysqlFission

import shutil

import time

class Fission:

x = []

y = []

z = []

d = []

def __init__(self):

print "欢迎使用fission类!"

# def __init__(self,x,y,z,d):

# def __init__(self,name):

# selfname = name

# print "欢迎使用fission类!"

def getData(self, name):

size = 0;

with open("/Users/Vicky/Documents/workspace/source_api/long/" + name + "log") as apidata:

for i in apidata:

data = isplit("\r\n")[0]split("|")[0]

low = isplit("\r\n")[0]split("|")[1]

high = isplit("\r\n")[0]split("|")[2]

diff = int(high) - int(low)

selfxappend(data)

selfyappend(low)

selfzappend(high)

selfdappend(diff)

size += 1;

def getDataMarkLine(self, name):

with open("/Users/Vicky/Documents/workspace/source_api/long/" + name + "log") as apidata:

for i in apidata:

data = isplit("\r\n")[0]split("|")

day = data[0]

time = float(data[1])

selfxappend(day)

selfyappend(time)

return [selfx, selfy]

if __name__ == "__main__":

names = []

for name in names:

name = u"三沙"

sql = MysqlFission()

sqlgetWeather(name)

fission = Fission()

fissionx = []

fissiony = []

fissionz = []

fissiond = []

fissiongetData(name)

try:

DatePlotMakePlotTwo(fissionx, name, high=fissiony, low=fissionz, diff=fissiond)

except BaseException:

print 2

shutilcopyfile(name + "html", "/Users/Vicky/Desktop/w/" + name + "html")

osremove(name + "html")

timesleep(5)

下面是北京市的效果图:

以上就是关于Python-openpyxl教程10 - 图表布局,填充图案以及进阶图表全部的内容,包括:Python-openpyxl教程10 - 图表布局,填充图案以及进阶图表、python 有简单的图表库吗、「Python」使用Pyecharts生成疫情分布地图等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10148963.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存