Python画图知识点(整理自用)

常用包一键复制

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.pyplot import MultipleLocator
from matplotlib.ticker import FuncFormatter

常用设置

# 解决中文显示问题
plt.rcParams['font.sans-serif']=['Time New Roman']     
plt.rcParams['axes.unicode_minus']=False

# 字号
plt.rcParams.update({'font.size': 13})

# 画布大小
plt.figure(figsize=(10,8))

# 给画布加上背景色(不要透明)
fig = plt.figure(figsize=(10, 8))
fig.patch.set_facecolor('white')

保存图片

# 先保存,再show
plt.savefig(r'./xxx.svg')
plt.show()

坐标轴设置

# x轴标签倾斜显示
plt.xticks(rotation = 60)

# 设置x轴坐标刻度间距
from matplotlib.pyplot import MultipleLocator
ax = plt.gca()
x_major_locator = MultipleLocator(5)
ax.xaxis.set_major_locator(x_major_locator)

# 上面三行代码可以写成一句
plt.gca().xaxis.set_major_locator(MultipleLocator(5))

# 在图片中加文字注释
plt.annotate('A' , xy=(25, 12), xytext=(0, 0), textcoords='offset points', fontsize=16)

# 解决图片显示不全
plt.tight_layout()

# 坐标轴设置成百分数显示
from matplotlib.ticker import FuncFormatter
def to_percent(temp, position):
    return '%1.1f'%(100*temp) + '%'
plt.gca().yaxis.set_major_formatter(FuncFormatter(to_percent))

# 坐标轴的刻度向右显示(默认是居中)
# 关键就是ha='right'
plt.xticks(list(range(1, 12)), labels, rotation=45, ha='right')

# 坐标刻度用科学计数法
plt.ticklabel_format(style='sci',scilimits=(0,0),axis='both')

# x轴和y轴的刻度比例一样
ax = plt.gca()
ax.set_aspect(1)

# 隐藏坐标轴刻度
plt.xticks([])
plt.yticks([])

图例的设置

# 图例字体变小
plt.legend(fontsize='x-small')
plt.legend(fontsize=8)

# 图例位置
# num1用于控制legend的左右移动,值越大越右,num2上下移动,值越大,越向上。
plt.legend(loc='upper right')
plt.legend(loc='lower left')
plt.legend(loc='upper center', bbox_to_anchor=(num1, num2))

# 图例不要框
plt.legend(frameon=False)

# 两列显示
plt.legend(ncol=2)

# 设置图例两列之间的距离
plt.legend(columnspacing=0.6)

# 设置图例中marker和文字之间的距离
plt.legend(handletextpad=0.1)

# 设置图例中图形和文字之间的距离(假如有3个元素)
legend = plt.gca().legend(ncol=2, loc='upper right', frameon=False, fontsize=17)
legend_text1 = legend.get_texts()[0]
legend_text2 = legend.get_texts()[1]
legend_text3 = legend.get_texts()[2]
legend_text1.set_position((-20, 0))  # 将文字向右移动10个像素
legend_text2.set_position((-20, 0))  # 将文字向右移动10个像素
legend_text3.set_position((-20, 0))  # 将文字向右移动10个像素

隐藏画框的四条边

ax=plt.gca()
ax.spines['bottom'].set_visible(False)
ax.spines['left'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)

设置画框四条边的粗细

ax = plt.gca()
ax.spines['bottom'].set_linewidth(3)
ax.spines['left'].set_linewidth(3)
ax.spines['right'].set_linewidth(3)
ax.spines['top'].set_linewidth(3)

子图

plt.subplot(221)
plt.subplot(222)
plt.subplot(211)
# 每一块正常画即可

色卡&私人收藏配色

colors1 = ['#ff595e', '#ffca3a', '#8ac926', '#1982c4', '#6a4c93']
colors = ["#FFBA40", "#42A4D1", '#409B6B', '#8C73BC', '#C6EE58']
colors = ["#D23F00", "#EE8B00", "#F3CE66", "#098294", "#A7D2E3"]

好看的箱线图

plt.figure(figsize=(10,5))
plt.rcParams.update({'font.size': 14})
sns.boxplot(x="村属性", y="数量", data=test, hue="数据类型", width=0.5, linewidth=1.0, palette="Set3",
            meanprops = {'marker':'D', 'markersize':6, 'markeredgecolor':"black"},
            medianprops = {'linestyle':'--'},
            flierprops = {'marker':'o', 'markersize':3},
            showmeans=True)
plt.ylim([0,150])
plt.xlabel("村属性")
plt.ylabel("数量")

散点密度图

from scipy.stats import gaussian_kde
from matplotlib import pyplot as plt

plt.rcParams['font.sans-serif']=['Arial']     
plt.rcParams['axes.unicode_minus']=False
plt.rcParams.update({'font.size': 15})
fig, ax = plt.subplots(figsize=(5,5))

y = np.array(data['PR'])
x = np.array(data['total_sum'])
xy = np.vstack([x,y])
z = gaussian_kde(xy)(xy)
idx = z.argsort()
x, y, z = x[idx], y[idx], z[idx]

scatter = ax.scatter(x,y,marker='o',c=z, s=15, cmap='Spectral_r')
divider = make_axes_locatable(ax)
cax = divider.append_axes("right", size="5%", pad=0.1)
formatter = mpl.ticker.ScalarFormatter(useMathText=True)
formatter.set_scientific(True)
formatter.set_powerlimits((0,0)) 
cbar = fig.colorbar(scatter, cax=cax, label='kde', format=formatter)
cbar.update_ticks()
ax.set_ylabel('xxx')
ax.set_xlabel('xxx')
ax.ticklabel_format(style='sci',scilimits=(0,0),axis='both')
ax.xaxis.set_major_locator(MultipleLocator(25))
plt.tight_layout()
plt.show()

 横向柱状图

importance = list(data2['importance'])
plt.barh(range(15), importance, align = 'center',color='#409B6B', alpha = 0.8, height=0.7)
plt.xlabel('Importance')
plt.title('Total')
plt.xlim([0, 8500])

matplotlib官网_找模板用

https://matplotlib.org/gallery.html

第三方在线画图网站

PlotDB: Share Visualizations with Everyone

配色网站

Trending color palettes - Coolors

Material Design Colors - Material Palette

用Python画地图

参考资料:详解python 利用 pyecharts 画地图(热力图)(世界地图,省市地图,区县地图)、动态流向图_ystraw - Come on!!!-CSDN博客_python 地图热力图

很多现成代码都有,只需要换一下数据。

但是!!需要注意的一点就是,pyecharts有1.x.x和0.x.x两个版本,两个版本不兼容,地区流量图(如下)要用1的版本,热力图要用0的版本,因为我最近两种图都需要画,所以需要在两个版本中反复横跳,经常重复一些安装的代码,所以我这里记下来,下次直接复制。

安装1.x.x,参考from pyecharts import options as opts报错问题以及解决办法_威斯登的博客-CSDN博客

pip install pyecharts35-1.7.1-py3-none-any.whl

安装0.x.x,参考

# 删掉之前的版本(试自己的情况看需不需要卸)
pip uninstall pyecharts35
# 安装
pip install pyecharts==0.1.9.4

对了,如果在cmd里面换了版本,我用的jupyter notebook,记得要把控制台关了重新再开一次,才能生效。

  • 10
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值