可视化做的好,直接提升获奖概率!可视化操作方法or代码模板一定要赛前准备好。
参考资源
Apache ECharts
兼容 IE6+、完美支持移动端、图表类型丰富的 HTML5 交互图表 | Highcharts
AntV | 蚂蚁数据可视化
简介 - pyecharts - A Python Echarts Plotting Library built with love.
Flourish | Data Visualization & Storytelling
FineBI商业智能软件 - 新一代自助大数据分析的BI工具
Plotly: The front end for ML and data science models
不能错过的六大在线画图网站dally2的博客-CSDN博客画图网站
在线可视化工具网站,让你做出漂亮的图表 | 设计达人(思路)
想做出漂亮的图表,这12个网站不能错过! - 设计文章 - 站酷(ZCOOL)
可视化工具Plotly
Plotly基础教程_周先森爱吃素的博客-CSDN博客_plotly
图之典
From data to Viz | Find the graphic you need(参考代码)
优秀资源
Highcharts ECharts 图之典 AntV From data to Viz 学习了解优秀图表
matplotlib实现
GitHub - Financial-Times/chart-doctor: Sample files to accompany the FT’s Chart Doctor column
Matplotlib
Matplotlib 中文
matplotlib.axes — Matplotlib 3.4.3 documentation
显示中文、负号
解决matplotlib中文和负号显示为方框的问题_wolf1132的博客-CSDN博客
%matplotlib inline
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
关于fig ax
matplotlib学习:搞明白plt. /ax./ fig - 薄书 - 博客园
matplotlib:先搞明白plt. /ax./ fig再画 - 知乎(仅看评论内容)
Matplotlib中的plt和ax都是啥?-技术圈
Matplotlib画图中fig,ax,plt的区别和联系 - 知乎
python 可视化:fig, ax = plt.subplots()画多表图的3中常见样例 & 自定义图表格式htuhxf的博客-CSDN博客
设置格式
设置y轴刻度Matplotlib最详细的刻度调整南辰以北的博客-CSDN博客(参考)
matplotlib ax 与 刻度相关函数 - 刘瀚阳 - 博客园
pyecharts
文档:简介 - pyecharts - A Python Echarts Plotting Library built with love.
示例:中文简介 - Document
百度地图 BMap
柱状图 Bar(其他软件)
Bar-旋转X轴标签Bar - Bar_rotate_xaxis_label
Bar-堆叠数据(全部)Bar - Bar_stack0
mixed_bar_and_lineBar - Mixed_bar_and_line
。。。
3D 柱状图 Bar3D
箱形图 Boxplot(其他软件)
日历图 Calendar
K 线图 Candlestick
数据集 Dataset
涟漪散点图 EffectScatter
漏斗图 Funnel
仪表盘 Gauge
地理坐标 Geo
关系图 Graph
热力图 Heatmap
折线图 Line
水球图 Liquid
地图 Map
3D 地图 Map3D
Globe 地图 MapGlobe
平行坐标系 Parallel
象型柱图 PictorialBar
饼状图 Pie
极坐标系 Polar
雷达图 Radar
桑基图 Sankey
散点图 Scatter
树图 Tree
矩形树图 Treemap
词云图 WordCloud
Origin
Origin科研绘图超快速上手指南_哔哩哔哩_bilibili
层次
- 底层:画布
- 中间层:坐标系
- 顶层:图线(折线 散点 柱状图)
origin绘图步骤总结:
1.打开origin,新建工程 文件 - 保存项目
2.创建book,导入数据 点击Book1重命名数据表;复制数据
3.创建graph,设置画布尺寸 双击白色修改尺寸
4.添加坐标系,设置位置尺寸 白色区域右键 - 新图层(轴) - 第一个
5.绘制图线 图 - 图表绘制 - 展开 - 可用数据:当前项目中的工作表 。。。
6.设置坐标轴格式 坐标轴刻度;坐标轴标签(一列文本);标题 - 上轴;网格;坐标轴粗细长度;。。。
7.设置线格式 双击图线
8.设置标题格式 右键编辑
9.添加并设置图例 右键 - 属性
10.保存工程,导出图片 文件 - 导出图形
折线图
Matlab
Matlab绘图控制命令 - wenglabs - 博客园
(1)LineStyle:线形
(2)LineWidth:线宽
(3)Color:颜色
(4)MarkerType:标记点的形状
(5)MarkerSize:标记点的大小
(6)MarkerFaceColor:标记点内部的填充颜色
(7)MarkerEdgeColor:标记点边缘的颜色
更多颜色见:MatlabRGB颜色对照表(0-1之间取值).pdf
D:\00000MCM\0 codes\2020B\mydisplay.m
clear
clc
data1 = [89.5753689417091,88.5430475920727,88.7109684597890,88.1888882774200,88.0168526117891,87.5428139437193,87.7453080213814,87.3972579019283,87.8106309660751,88.8763731648226];
data2 = [88.3500000000000,88.6500000000000,88.4500000000000,88.6500000000000,88.2500000000000,88.0500000000000,87.9500000000000,88.0500000000000,88.1200000000000,88.6500000000000];
figure(1)
% % X可省
% % plot(X, Y, '线条标记控制, 'Color', [0 0.60 1], 'linewidth', 1.5, 'MarkerSize', 15)
% Color
% 橘色 [1 0.5 0] 255,129,19 -> [1, 0.506, 0.075] plt配色
% 青蓝 [0 0.67 1] 45,128,185 -> [0.176, 0.502, 0.725] plt配色
% 线条标记控制中 r g b 洋红 m 青绿色 c
X = 1:size(data1, 2);
% plot(X, data1, '-r', 'linewidth', 1.5, 'MarkerSize', 10) % 默认可能为深蓝色
% 配色方案1
plot(X, data1, '-o', 'Color', [1, 0.506, 0.075], 'linewidth', 1.5, 'MarkerSize', 10) % 橘色
hold on
plot(data2 + 0, '-*', 'Color', [0.176, 0.502, 0.725], 'linewidth', 1.5, 'MarkerSize', 10); % 青蓝
% 配色方案2
% plot(X, data1, '-ro', 'linewidth', 1, 'MarkerSize', 10) % 红色
% hold on
% plot(data2 + 0, '-b*', 'linewidth', 1, 'MarkerSize', 10); % 蓝色 (虚线--)
% % 渐变
% plot(data2 + 0, '-o', 'Color', [0.67843 0.84706 0.90196], 'linewidth', 1.5, 'MarkerSize', 10);
% plot(data2 + 1, '-o', 'Color', [0.68627 0.93333 0.93333], 'linewidth', 1.5, 'MarkerSize', 10);
% plot(data2 + 2, '-o', 'Color', [0.52941 0.80784 0.98039], 'linewidth', 1.5, 'MarkerSize', 10);
% plot(data2 + 3, '-o', 'Color', [0.11765 0.56471 1], 'linewidth', 1.5, 'MarkerSize', 10);
% plot(data2 + 4, '-o', 'Color', [0.2549 0.41176 0.88235], 'linewidth', 1.5, 'MarkerSize', 10);
legend('legend1', 'legend2') % 。。。。。。
title('title')
ylabel('ylabel')
xlabel('xlabel')
% axis([-inf inf, -inf inf])
Python
plt参考
01 散点图 · 语雀matplotlib中 plt.plot() 函数中**kwargs的参数形式 - 帅帅的飞猪 - 博客园(参考)
python画图(标记、marker、设置标记大小、marker符号大全)(图文详细入门教程五) - mr_qccc - 博客园
color: 颜色
linestyle: 线条样式
marker: 标记风格
markerfacecolor: 标记颜色
markersize: 标记大小
D:\00000py\1\mcm mydisplay.py
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
# 数据
data1 = [89.5753689417091,88.5430475920727,88.7109684597890,88.1888882774200,88.0168526117891,87.5428139437193,87.7453080213814,87.3972579019283,87.8106309660751,88.8763731648226]
data2 = [88.3500000000000,88.6500000000000,88.4500000000000,88.6500000000000,88.2500000000000,88.0500000000000,87.9500000000000,88.0500000000000,88.1200000000000,88.6500000000000]
plt.plot(data1, marker='X', markersize=10) # 最简单画法
pltxx = range(len(data1))
plt.plot(pltxx, data2, linestyle='-', linewidth=2, marker='.', markersize=14) # 标准画法 label=‘label’
# 装饰
#plt.gca() 获取当前的子图,如果当前没有任何子图的话,就帮我创建一个新的子图
plt.gca().set(xlim=(-1, 10), ylim=(87, 90)) #控制横纵坐标的范围 (确定范围 midwest["area"].max() ......)
plt.xticks(fontsize=12) #坐标轴上的标尺的字的大小
plt.yticks(fontsize=12)
plt.ylabel('ylabel', fontsize=12) #坐标轴上的标题和字体大小
plt.xlabel('xlabel', fontsize=12)
plt.title("title", fontsize=14) #整个图像的标题和字体的大小
plt.legend(['data1', 'data2'], fontsize=12, loc=0) #图例的字体大小 loc图例位置0 - 10
# plt.legend(fontsize=12, loc=0)
# plt.grid() # 添加网格
# plt.savefig("./datasets/1111.jpg",dpi = 300)
plt.show()
t-SNE降维
可视化聚类结果
展示数据变化 (颜色变化 散点图 三维变化图)
文章:
2020B 0031
Python
可以实现数据变化 (颜色变化散点图 三维变化图)
知识干货-机器学习-TSNE数据降维 - 知乎
D:\00000py\1\mcm tsne_display.py
import matplotlib.pyplot as plt
import numpy as np
import xlrd
from sklearn.preprocessing import MinMaxScaler
from sklearn.manifold import TSNE
from mpl_toolkits.mplot3d import Axes3D
# 缩放数据到[0, 1]
def scale(data):
minmax = MinMaxScaler()
data = minmax.fit_transform(data)
# print(input_reframed)
# np.savetxt('Smin_', minmax.min_)
# np.savetxt('Sscale_', minmax.scale_)
# print(minmax.scale_)
# print(minmax.min_)
return data, minmax.scale_[-1], minmax.min_[-1]
# 读取数据
data = xlrd.open_workbook(r'D:\00000MCM\0 codes\2020B\q3.xlsx') # datas q2xxhg
# 转为ndarray
table = data.sheet_by_index(0) #按索引获取工作表,0就是工作表1
resArray = []
for i in range(1, table.nrows): #table.nrows表示总行数 去除第一行
line=table.row_values(i) #读取每行数据,保存在line里面,line是list
resArray.append(line) #将line加入到resArray中,resArray是二维list
resArray = np.array(resArray) #将resArray从二维list变成数组
data = resArray # 列数据
S = data[:, 0] # 列数据 硫含量
X = data[:, 1] # 列数据 辛烷值
data = data[:, 2:] # 列数据
tsnedim2 = TSNE(n_components=2,learning_rate=0.1).fit_transform(data) # 降维到两个变量
tsne_1 = tsnedim2[:, 0]
tsne_2 = tsnedim2[:, 1]
tsne_1 = np.sort(tsne_1) # 排序
tsne_2 = np.sort(tsne_2)
S_temp, S_a, S_b = scale(S.reshape(-1,1)) # 缩放数据到[0, 1]直接浮点数 展示颜色用
X_temp, X_a, X_b = scale(X.reshape(-1,1))
# 颜色变化散点图
plt.scatter(tsne_1, tsne_2, c=np.rint(X_temp * 255)) # 放大到255 [0,1]仅两个颜色
plt.colorbar() # 颜色条
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
# plt.savefig("scaxinwan.svg", format="svg")
# plt.savefig("scaxinwan.png", format="png")
plt.show()
# plt.scatter(tsne_1, tsne_2, c=np.rint(S_temp * 256))
# plt.colorbar()
# plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
# # plt.savefig("scaxinwan.svg", format="svg")
# # plt.savefig("scaxinwan.png", format="png")
# plt.show()
# 单一颜色 变化图 三维(高度为数据)
fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(tsne_1, tsne_2, X, c='g')
# ax.set_zlabel('辛烷值 ') # 坐标轴 坐标轴
# ax.set_ylabel('Y')
# ax.set_xlabel('X')
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
# plt.savefig("3Dxinwan.svg", format="svg")
# plt.savefig("3Dxinwan.png", format="png")
plt.show()
#########################################################################
# 三维test
tsnedim3 = TSNE(n_components=3,learning_rate=0.1).fit_transform(data) # 降维到两个变量
tsne31 = tsnedim3[:, 0]
tsne32 = tsnedim3[:, 1]
tsne33 = tsnedim3[:, 2]
# tsne_1 = np.sort(tsne_1) # 排序
# tsne_2 = np.sort(tsne_2)
# 变化图 三维(高度为数据)
fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(tsne31, tsne32, tsne33, c=S) # c='g' S S_temp均可
# ax.set_zlabel('辛烷值 ') # 坐标轴 坐标轴
# ax.set_ylabel('Y')
# ax.set_xlabel('X')
# plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
# plt.savefig("3Dxinwan.svg", format="svg")
# plt.savefig("3Dxinwan.png", format="png")
plt.show()
Matlab
可视化利器 t-SNE(matlab)——用于高维数据的自动降维和绘图_Limber的博客-CSDN博客_matlab tsne(参考)
t-Distributed Stochastic Neighbor Embedding - MATLAB tsne - MathWorks 中国
tsne Settings - MATLAB & Simulink - MathWorks 中国(无效)
参考文档 D:\00000MCM\0 codes\2020B\User_guide.pdf
三维散点图 - MATLAB scatter3 - MathWorks 中国
matlab按颜色给散点图加图例 - 简书(参考 画三维图图例)
D:\00000MCM\0 codes\2020B\mytsne.m
clear
clc
rng default % for reproducibility
% load fisheriris
load tsnedata
% meas 150x4 double
% species 150x1 cell
% labels 150x1 double
% 二维画图
Y2 = tsne(meas);
figure()
gscatter(Y2(:,1), Y2(:,2), species) % 传入类别
% 三维画图
Y3 = tsne(meas, [], 3); % 聚类后坐标 = tsne(train_X, 无需标签[], 需要的维度no_dims, PCA维度initial_dims, perplexity);
figure()
scatter3(Y3(:,1), Y3(:,2), Y3(:,3), [], labels) % 传入颜色数值标签 scatter3(X,Y,Z,S,C) S大小 C颜色
% 三维画图 图例需要单独绘制(循环未成功)
figure()
tmp1 = Y3(labels == 1, :);
tmp2 = Y3(labels == 2, :);
tmp3 = Y3(labels == 3, :);
labels1 = ones(size(tmp1, 1), 1) * 1;
labels2 = ones(size(tmp1, 1), 1) * 2;
labels3 = ones(size(tmp1, 1), 1) * 3;
h1 = scatter3(tmp1(:,1), tmp1(:,2), tmp1(:,3), [], labels1); hold on;
h2 = scatter3(tmp2(:,1), tmp2(:,2), tmp2(:,3), [], labels2); hold on;
h3 = scatter3(tmp3(:,1), tmp3(:,2), tmp3(:,3), [], labels3); hold on;
legend([h1(1), h2(1), h3(1)], '函数1图例', '函数2图例', '函数3图例', 'location', 'northwest');
地图
Python
folium库:
Python地图可视化:folium绘制轨迹 - Shaw_喆宇 - 博客园
Python地图可视化:folium绘制轨迹 - 码农教程
Python绘制地图神器folium入门_hustanding-CSDN博客_folium
地图可视化组件–folium简单介绍_AIHUBEI的博客-CSDN博客
folium库的使用 - 知乎
folium:地图数据可视化库 | 码农网
python:folium库实现地图可视化_honely-hermit的博客-CSDN博客
其他方法:
多个经纬度地点数据,如何同时在地图上标注出来(路径显示) - Feyn - 博客园
百度地图根据经纬度绘制轨迹鱿鱼的博客-CSDN博客百度地图绘制轨迹(html)
根据经纬度坐标值在百度地图上绘制轨迹_LFW的博客-CSDN博客(html)
百度地图根据点绘制轨迹_拒绝成猿的程序员-CSDN博客(html)
实现:偏差修正 画线 圆圈 标记
D:\00000py\1\mcm foliumtestjupyter.ipynb
%matplotlib inline
import pandas as pd
import numpy as np
import folium
import webbrowser
data1 = pd.read_excel(r'D:\00000py\1\datasets\2019d\folium.xlsx')
data1_pd = pd.DataFrame(data1) # DataFrame->DataFrame
data1_np = np.array(data1_pd) # DataFrame->ndarray
# # 取出经纬度
# data1_list = data1_np.tolist() # ndarray->list
# j = data1_np[:, 5]
# w = data1_np[:, 6]
# 取出经纬度 (采用)
jw = data1_np[:, [6, 5]] # 取出经纬度
# # 偏差修正 复杂方法
# hang, lie = jw.shape
# delta_ori = np.ones([hang, lie])
# delta = np.asarray([0.11, -0.22]) # 偏差
# y = delta_ori * delta
# jwnew = jw + delta
# 偏差修正 简单方法 (采用)
delta = np.asarray([-0.0027, +0.0053]) # 偏差 (纬度, 经度)
jwnew = jw + delta
# tolist
jwnew = jwnew.tolist()
## 初始化地图,指定固定座标 eg上海市[31.2389, 121.4992]
m = folium.Map(
location= jwnew[0], # [31.2389, 121.4992]
zoom_start=12,
tiles='http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}', # 高德街道图
# tiles='http://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}', # 高德卫星图
# tiles='https://mt.google.com/vt/lyrs=s&x={x}&y={y}&z={z}', # google 卫星图
# tiles='https://mt.google.com/vt/lyrs=h&x={x}&y={y}&z={z}', # google 地图
attr='default'
)
# 画线
folium.PolyLine( # polyline方法为将坐标用虚线形式连接起来
jwnew, # 将坐标点连接起来
weight=3, # 线的大小为2
color='red', # 线的颜色 蓝色 #00BFFF 查找表
opacity=0.8, # 线的透明度
# dash_array='5' # 虚线频率
).add_to(m) # 将这条线添加到刚才的区域m内
# 圈 大小固定(采用) 多个点循环画图
folium.Circle(
location=jwnew[500], #圆圈中心的经纬度
radius=400, # 圆的半径 单位为米(m)
color='#BA55D3', #圈的颜色
popup='popup',
fill=True, #是否填充
fill_color='#BA55D3', # 填充颜色
fill_opacity=1.0 # 填充透明度 默认0.2
).add_to(m)
# # 圆 大小随地图变化
# folium.CircleMarker(
# location=jwnew[1500],
# radius=50,
# popup='popup',
# color='#DC143C', #圈的颜色
# fill=True, #是否填充
# fill_color='#6495ED' #填充颜色
# ).add_to(m)
# # 添加marker到地图
# folium.Marker([31.2453,121.4857], popup='123', tooltip='tooltip',icon=folium.Icon(color='red')).add_to(m)
# folium.Marker([31.2418,121.4953], popup='456', tooltip='tooltip',icon=folium.Icon(color='green',icon='info-sign')).add_to(m)
# folium.Marker(jwnew[0], popup='123', tooltip='tooltip',icon=folium.Icon(color='red')).add_to(m)
# folium.Marker(jwnew[1000], popup='456', tooltip='tooltip',icon=folium.Icon(color='green',icon='info-sign')).add_to(m)
# 保存 打开
m.save('f1.html')
webbrowser.open('f1.html')
词云
WordArt.com - Word Cloud Art Creator
导入excel一列
- 自动统计需要每个单元格无空格(可以先去除空格 后期再补上)