做事写文章,学会一步一步拆建,从整体到局部,还是从局部到整体都行。
达到目的一共分为几大步骤,每一步又分为哪几个小步骤,把小步骤都完成好了,这样就达到自己的目的了
制图也是这样一个过程,条理清晰,一步一步做就行了,编程部分就安理论一步一步来,现在都有写好的代码,一个图最多一两天时间就ok了,很简单,不要害怕。
如果你看了这篇文章,还不懂数据可视化制图,请私聊我
先上图,看效果
和弦图(http://antv-2018.alipay.com/zh-cn/vis/chart/chord.html)
热力图
迁移地图(https://www.zhihu.com/question/279406121/answer/410684539)
桑葚图(https://www.zhihu.com/question/45502919)
1 引言
1.1 绘图的5种工具
下面一共包括5种方法,想要实现自由制图,,掌握python或者R语言中的一种,再掌握ps
1.1.1 R语言的ggplot
1.1.2 Python
(1)matplotlib
(2)Seaborn
(3)plotnine
1.1.3 办公软件
(1)excel
(2)wps
1.1.4 ps
只能说是P图吧,根据数据制作图表不合适
1.1.5 一些直接现成的网站
这些网站已经生成了很多好看的图,只需要对模板修改就可以了
https://blog.youkuaiyun.com/zw0pi8g5c1x/article/details/79308269
1.2 绘图目的
(1)展示数据,比文字的展示力更强
(2)揭示数据之间的联系,本质和规律,但从表格中看不出两者的关系。
2 制图步骤
下面的4个过程就是Nathan Yan总结的数据可视化的4个步骤,想要得到完美的图,就是在下面4个过程进行思索,和写论文相似。
2.1 拥有的数据
自己拥有哪些数据
2.2 想表达什么数据信息
两者的关系,趋势变化,比较?
2.3 选择数据可视化方法
可以表示维度的有,x,y,z,大小(长、半径、周长、面积),颜色,形状,纹理,前5个比较常用
可以表示:
(1)y和多个x的关系,1对多,多对1,
(2)y1、y2、y3和多个x的关系等;多对多。
也就是要选择使用哪一种图表,首先从下面的6种类型看,从每种类型选择相应的图表,
(1)但是同样一种图表可以表示不同类型的数据,比如热力图可以表示数据的关系,同样也可以表示两种类别的比较,比如相差多少。比如柱状图可以表示两个类别的比较,也可以表示随时间的变化,时间序列型数据。
(2)另外类别比较数据,也可以把问题转换为数据关系型数据,就是数据的关系可以变化,不要太死心眼了。比如变量1和变量2的数值对比,本来是类别比较型,可以两种数据相减,变成数据关系型数据。
几种类型:
(1)类别比较
(2)数据关系
(3)数据分布
(4)时间序列
(5)局部整体
(6)地理空间
2.3.1 选择可视化工具
python或R
2.3.2 图表类型
选择哪一种或者哪几种图表
2.3.3 图表的整体设计
一共包括几张图,也就是几部分,大图和子图等
2.3.4 坐标系选择
(1)直角坐标系
(2)极坐标系
(3)地理坐标系
2.3.5 其它琐碎
(1)点、线样式、宽度、颜色
(2)文字
(3)坐标轴和刻度
(4)图例
(5)图名
(6)网格
(7)间距
(8)背景颜色等
2.3.6 颜色主题
颜色具有三个特性,即色相,明度和饱和度。颜色的这三个特性及其相互关系可以用三度空间的颜色立体来说明。
颜色大全
https://www.5tu.cn/colors/yansezhongwenming.html
2.3.6.1 3种色彩表示
(1)RGB颜色
(2)HSL或HSV
(3) LUV
2.3.6.2 暖色和冷色
暖色系
黄色、红色、橙色、粉红色、棕色。
冷色系
蓝色、绿色、紫色。
中色系
黑色、白色、灰色。
2.3.6.3 颜色搭配
根据色轮进行颜色搭配,或者从配色网上找人家搭配好的颜色
单色搭配
互补色:色轮上的对称颜色
多色搭配
2.3.6.4 matplotlib 颜色搭配
(1)https://blog.youkuaiyun.com/weixin_39580795/article/details/102622004
(2)https://matplotlib.org/stable/tutorials/colors/colormaps.html
(3)https://mp.weixin.qq.com/s?__biz=MzUwOTg0MjczNw==&mid=2247484329&idx=1&sn=20ec36f7f5077221671b32d47c3412c8&chksm=f90d47f7ce7acee11449c5584a11a020cf05c27f7a60b9357bbdc35181cc7e8420c594d09fc5&scene=158#rd
2.4 从图表中获得的数据信息
进行结果总结,预期是什么,和预期是否一致,和别人的研究结果是否一致。
3 图表类型大全
https://wenku.baidu.com/view/ff15e667aa114431b90d6c85ec3a87c240288ac6.html
4 绘图技巧
**一个小技巧,**可以在某一属性再加颜色变化,比如大小上,再添加颜色,这两种都表示同一属性,这样做出的图更好看,就是又大且颜色深的数值越大。不要颜色也能反映数据变化,加了颜色后更震撼了。
**另一个小技巧,**背景加上颜色
比如上面的圆环图,不加颜色也可以表示比例大小,加了颜色以后就更好看了。
4.1 高维和多变量
高维指数据具有多个独立属性
多变量数据指数据具有多个相关属性
实际上用起来x,y,z,大小颜色等既可以表示高纬度,也可以表示多变量。所以一般不用刻意区分高维和多变量,实际问题实际分析。
4.2 python地图绘制
python使用GeoPandas读取shp格式的地图
5 学习路径
(1)把张杰老师的数据可视化之美看了
(2)B站上学ps的相关课程资料
(3)掌握一些经典案例和查阅配色网站
百度的颜色定义:
https://baike.baidu.com/item/%E9%A2%9C%E8%89%B2/5014?fr=aladdin
Matplotlib可视化最有价值的50个图表(附完整Python源代码)
https://www.jiqizhixin.com/articles/2019-01-15-11
好好学一个月完全就是数据可视化大师
6 绘制峦峰图
# https://matplotlib.org/matplotblog/posts/create-ridgeplots-in-matplotlib/
import pandas as pd
import numpy as np
from sklearn.neighbors import KernelDensity
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.gridspec as grid_spec
data = pd.read_csv(r"H:\01HTutorWork\1长江经济带\1月25号长江经济带地理探测器\4论文\1论文图片\风险探测\风险探测转置.csv")
colors = ['#0000ff', '#3300cc', '#660099', '#990066', '#cc0033', '#ff0000', '#3300cc', '#660099']
#colors = ['#6495ED', '#4169E1', '#4682B4', '#0000CD', '#00008B', '#A52A2A', '#CD5C5C', '#A0522D']
#colors = ['#3333CC', '#99CCFF', '#66FF66', '#6666CC', '#333399', '#CD5C5C', '#FF9966', '#CC6633']
colors = ['#3333CC', '#99CCFF', '#339999', '#6666CC', '#333399', '#FF9966','#CD5C5C', '#cc0033',]
names = ["AWS","SH","ARH","HT","AR","PD","NDVI","DEM"]
# 得到6行1列的子图
gs = (grid_spec.GridSpec(8,1))
# 图像的宽高
fig = plt.figure(figsize=(12,8))
# 建一个空列表
ax_objs = []
for i in range(8):
# # 创建新的子图
ax_objs.append(fig.add_subplot(gs[i:i + 1, 0:]))
x = data.Grade
y = data[names[i]]
# 使用颜色进行填充空白
ax_objs[-1].fill_between(x, y, color=colors[i])
# 设置x标签,只有最后一个有
if i == 7:
ax_objs[-1].set_xlabel("Grade", fontsize=16,fontweight="bold")
else:
ax_objs[-1].set_xticklabels([])
# 设置x轴,y轴的范围
ax_objs[-1].set_xlim(0, 4)
if i in [0,5,6]:
ax_objs[-1].set_ylim(0, 0.2)
# 设置左边的类型标签
ax_objs[-1].text(-0.15, 0.08, names[i], fontweight="bold", fontsize=14, ha="right")
else:
ax_objs[-1].set_ylim(0, 0.1)
ax_objs[-1].text(-0.15, 0.04, names[i], fontweight="bold", fontsize=14, ha="right")
"""
# 设置四周的线不可见
spines = ["top", "right", "left", "bottom"]
for s in spines:
ax_objs[-1].spines[s].set_visible(False)
# 让它可以透明显示
rect = ax_objs[-1].patch
rect.set_alpha(0)
# 移除y轴
ax_objs[-1].set_yticklabels([])
"""
#gs.update(hspace=-0.7)
#fig.text(0.07,0.85,"Distribution of Aptitude Test Results from 18 – 24 year-olds",fontsize=20)
plt.tight_layout()
plt.show()
7 气泡图,方块图,热力图
# -*- coding: utf-8 -*-
"""
Created on Sat Nov 30 10:57:58 2019
@author: Jie Zhang,微信公众号【EasyShu】,本代码源自《Python数据可视化之美》
"""
import numpy as np
import pandas as pd
from plotnine import *
from plotnine.data import mtcars
mat_corr=np.round(mtcars.corr(),1).reset_index()
mydata=pd.melt(mat_corr,id_vars='index',var_name='var',value_name='value')
mydata['AbsValue']=np.abs(mydata.value)
#------------------------------------------------(b) 气泡图------------------------------------------
base_plot=(ggplot(mydata, aes(x ='index', y ='var', fill = 'value',size='AbsValue')) +
geom_point(shape='o',colour="black") +
scale_size_area(max_size=11, guide=False) +
scale_fill_cmap(name ='RdYlBu_r')+
coord_equal()+
theme(dpi=100,figure_size=(4,4)))
print(base_plot)
#------------------------------------------------(c) 方块图------------------------------------------------
base_plot=(ggplot(mydata, aes(x ='index', y ='var', fill = 'value',size='AbsValue')) +
geom_point(shape='s',colour="black") +
scale_size_area(max_size=10, guide=False) +
scale_fill_cmap(name ='RdYlBu_r')+
coord_equal()+
theme(dpi=100, figure_size=(4,4)))
print(base_plot)
#------------------------------------------------(f) 带标签的热力图-----------------------------------
base_plot=(ggplot(mydata, aes(x ='index', y ='var', fill = 'value',label='value')) +
geom_tile(colour="black") +
geom_text(size=8,colour="white")+
scale_fill_cmap(name ='RdYlBu_r')+
coord_equal()+
theme(dpi=100,figure_size=(4,4)))
print(base_plot)
在这里插入图片描述
8 网页在线图标生成工具
点点鼠标就可以的三个网页端可视化工具介绍
sanddance:https://sanddance.js.org/app/
kepler:https://kepler.gl/
mobmap:https://shiba.iis.u-tokyo.ac.jp/member/ueyama/mm/app/
这个是代码示例,R和python都有
https://www.python-graph-gallery.com/
机器学习算法的可是化动态过程,帮助更好理解算法
https://www.naftaliharris.com/blog/
9 地理数据绘图
https://blog.youkuaiyun.com/qq_41185868/article/details/80806521
太棒了https://www.zhihu.com/question/33783546
10 参考
【数据可视化】Python制作精美的大屏可视化_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1Ak4y167pR/?spm_id_from=333.788.b_7265636f5f6c697374.11