pandas画图的几个技巧

这篇博客介绍了在使用pandas画图时遇到的三个问题及其解决方案:如何增加颜色种类以避免颜色重复,解决中文显示问题,以及结合seaborn进行图表美化,同时处理seaborn不显示中文的状况。

1、pandas画图的时候颜色种类不够

我们经常会用pandas处理数据,处理完之后,很多时候会画个图看看。但是pandas默认的曲线就只有十种颜色,如果我们要绘制的数据过多,就会出现颜色重复。其实很简单,pandas绘图的时候有一个colors参数,我们可以对这个参数进行赋值。

data_df.plot(figsize=(19, 10), colors=cnames.keys())

其实,colors只要赋值成一个列表就可以了。

主语cnames是什么:

cnames = {
'aliceblue': '#F0F8FF',
'antiquewhite': '#FAEBD7',
'aqua': '#00FFFF',
'aquamarine': '#7FFFD4',
'azure': '#F0FFFF',
'beige': '#F5F5DC',
'bisque': '#FFE4C4',
'black': '#000000',
'blanchedalmond': '#FFEBCD',
'blue': '#0000FF',
'blueviolet': '#8A2BE2',
'brown': '#A52A2A',
'burlywood': '#DEB887',
'cadetblue': '#5F9EA0',
'chartreuse': '#7FFF00',
'chocolate': '#D2691E',
'coral': '#FF7F50',
'cornflowerblue': '#6495ED',
'cornsilk': '#FFF8DC',
'crimson': '#DC143C',
'cyan': '#00FFFF',
'darkblue': '#00008B',
'darkcyan': '#008B8B',
'darkgoldenrod': '#B8860B',
'darkgray': '#A9A9A9',
'darkgreen': '#006400',
'darkkhaki': '#BDB76B',
'darkmagenta': '#8B008B',
'darkolivegreen': '#556B2F',
'darkorange': '#FF8C00',
'darkorchid': '#9932CC',
'darkred': '#8B0000',
'darksalmon': '#E9967A',
'darkseagreen': '#8FBC8F',
'darkslateblue': '#483D8B',
'darkslategray': '#2F4F4F',
'darkturquoise': '#00CED1',
'darkviolet': '#9400D3',
'deeppink': '#FF1493',
'deepskyblue': '#00BFFF',
'dimgray': '#696969',
'dodgerblue': '#1E90FF',
'firebrick': '#B22222',
'floralwhite': '#FFFAF0',
'forestgreen': '#228B22',
'fuchsia': '#FF00FF',
'gainsboro': '#DCDCDC',
'ghostwhite': '#F8F8FF',
'gold': '#FFD700',
'goldenrod': '#DAA520',
'gray': '#808080',
'green': '#008000',
'greenyellow': '#ADFF2F',
'honeydew': '#F0FFF0',
'hotpink': '#FF69B4',
'indianred': '#CD5C5C',
'indigo': '#4B0082',
'ivory': '#FFFFF0',
'khaki': '#F0E68C',
'lavender': '#E6E6FA',
'lavenderblush': '#FFF0F5',
'lawngreen': '#7CFC00',
'lemonchiffon': '#FFFACD',
'lightblue': '#ADD8E6',
'lightcoral': '#F08080',
'lightcyan': '#E0FFFF',
'lightgoldenrodyellow': '#FAFAD2',
'lightgreen': '#90EE90',
'lightgray': '#D3D3D3',
'lightpink': '#FFB6C1',
'lightsalmon': '#FFA07A',
'lightseagreen': '#20B2AA',
'lightskyblue': '#87CEFA',
'lightslategray': '#778899',
'lightsteelblue': '#B0C4DE',
'lightyellow': '#FFFFE0',
'lime': '#00FF00',
'limegreen': '#32CD32',
'linen': '#FAF0E6',
'magenta': '#FF00FF',
'maroon': '#800000',
'mediumaquamarine': '#66CDAA',
'mediumblue': '#0000CD',
'mediumorchid': '#BA55D3',
'mediumpurple': '#9370DB',
'mediumseagreen': '#3CB371',
'mediumslateblue': '#7B68EE',
'mediumspringgreen': '#00FA9A',
'mediumturquoise': '#48D1CC',
'mediumvioletred': '#C71585',
'midnightblue': '#191970',
'mintcream': '#F5FFFA',
'mistyrose': '#FFE4E1',
'moccasin': '#FFE4B5',
'navajowhite': '#FFDEAD',
'navy': '#000080',
'oldlace': '#FDF5E6',
'olive': '#808000',
'olivedrab': '#6B8E23',
'orange': '#FFA500',
'orangered': '#FF4500',
'orchid': '#DA70D6',
'palegoldenrod': '#EEE8AA',
'palegreen': '#98FB98',
'paleturquoise': '#AFEEEE',
'palevioletred': '#DB7093',
'papayawhip': '#FFEFD5',
'peachpuff': '#FFDAB9',
'peru': '#CD853F',
'pink': '#FFC0CB',
'plum': '#DDA0DD',
'powderblue': '#B0E0E6',
'purple': '#800080',
'red': '#FF0000',
'rosybrown': '#BC8F8F',
'royalblue': '#4169E1',
'saddlebrown': '#8B4513',
'salmon': '#FA8072',
'sandybrown': '#FAA460',
'seagreen': '#2E8B57',
'seashell': '#FFF5EE',
'sienna': '#A0522D',
'silver': '#C0C0C0',
'skyblue': '#87CEEB',
'slateblue': '#6A5ACD',
'slategray': '#708090',
'snow': '#FFFAFA',
'springgreen': '#00FF7F',
'steelblue': '#4682B4',
'tan': '#D2B48C',
'teal': '#008080',
'thistle': '#D8BFD8',
'tomato': '#FF6347',
'turquoise': '#40E0D0',
'violet': '#EE82EE',
'wheat': '#F5DEB3',
'white': '#FFFFFF',
'whitesmoke': '#F5F5F5',
'yellow': '#FFFF00',
'yellowgreen': '#9ACD32'}

这个字典来自于互联网,大家可以根据自己的数据量和自己想要的颜色来筛选这个字典。


2、中文的显示

在notebook中,matplotlib默认是不会显示中文的,最简单的办法就是加上下面这几行:

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换 sans-serif 字体)
plt.rcParams['axes.unicode_minus'] = False # 步骤二(解决坐标轴负数的负号显示问题)

3、seaborn的使用

seaborn只要import了之后,绘图就会自动美化一点。但是同样的,不能显示中文,所以需要下面这行语句:

import seaborn
seaborn.set_style('whitegrid',{'font.sans-serif':['simhei','Arial']})

 

 

<think>我们之前讨论了如何设置标题和标题样式,现在用户想了解如何向图表中添加数据。在Matplotlib中,向图表添加数据主要通过绘图函数实现,例如绘制折线图、散点图、柱状图等。下面将详细介绍几种常见的方法。 ### 1. 添加单组数据 使用`plot`函数添加一组数据(折线图): ```python import matplotlib.pyplot as plt import numpy as np # 创建数据 x = np.linspace(0, 10, 100) y = np.sin(x) # 创建图表并添加数据 plt.figure(figsize=(8, 5)) plt.plot(x, y, label='正弦曲线') # 添加一组数据[^1] # 设置标题、标签等 plt.title('正弦函数', fontsize=14) plt.xlabel('x轴', fontsize=12) plt.ylabel('y轴', fontsize=12) plt.legend() plt.show() ``` ### 2. 添加多组数据 在同一图表中添加多组数据(例如多条折线): ```python plt.figure(figsize=(8, 5)) # 添加第一组数据 plt.plot(x, np.sin(x), label='sin(x)', color='blue') # 添加第二组数据 plt.plot(x, np.cos(x), label='cos(x)', color='red', linestyle='--') plt.title('三角函数对比', fontsize=14) plt.legend() plt.show() ``` ### 3. 添加散点数据 使用`scatter`函数添加散点数据: ```python # 生成随机散点数据 np.random.seed(0) x_rand = np.random.rand(50) * 10 y_rand = np.random.rand(50) * 10 plt.figure(figsize=(8, 5)) plt.scatter(x_rand, y_rand, color='green', label='随机点') # 添加散点数据[^3] plt.title('随机散点图', fontsize=14) plt.legend() plt.show() ``` ### 4. 添加柱状图数据 使用`bar`函数添加柱状图数据: ```python # 柱状图数据 categories = ['A', 'B', 'C', 'D'] values = [25, 40, 30, 45] plt.figure(figsize=(8, 5)) plt.bar(categories, values, color='skyblue', label='数量') # 添加柱状图数据[^5] plt.title('柱状图示例', fontsize=14) plt.legend() plt.show() ``` ### 5. 添加自定义数据标记 在折线图中突出显示特定数据点: ```python plt.figure(figsize=(8, 5)) # 绘制正弦曲线 plt.plot(x, y, 'b-', label='正弦曲线') # 添加特定数据点标记 highlight_x = [0, np.pi, 2*np.pi, 3*np.pi] highlight_y = np.sin(highlight_x) plt.scatter(highlight_x, highlight_y, color='red', s=80, label='关键点', zorder=5) # s为点大小 plt.title('正弦函数关键点标记', fontsize=14) plt.legend() plt.show() ``` ### 6. 添加填充数据(面积图) 使用`fill_between`填充两条曲线之间的区域: ```python plt.figure(figsize=(8, 5)) # 绘制两条曲线 plt.plot(x, np.sin(x), 'b', label='sin(x)') plt.plot(x, np.cos(x), 'r', label='cos(x)') # 填充两条曲线之间的区域 plt.fill_between(x, np.sin(x), np.cos(x), where=(np.sin(x) > np.cos(x)), color='green', alpha=0.3, label='sin>cos区域') # 条件填充[^5] plt.title('曲线间填充', fontsize=14) plt.legend() plt.show() ``` ### 7. 添加误差线 使用`errorbar`添加带误差线的数据: ```python # 实验数据 x_exp = np.arange(1, 6) y_exp = [10, 15, 17, 14, 12] y_err = [1, 1.5, 2, 1.2, 0.8] plt.figure(figsize=(8, 5)) plt.errorbar(x_exp, y_exp, yerr=y_err, fmt='o', capsize=5, label='实验数据') # 添加误差线[^3] plt.title('实验数据误差图', fontsize=14) plt.legend() plt.show() ``` ### 8. 添加文本注释 使用`text`或`annotate`在特定位置添加文本说明: ```python plt.figure(figsize=(8, 5)) plt.plot(x, y) # 在特定点添加文本 plt.text(5, 0, '零点(5,0)', fontsize=12, color='purple') # 在坐标(5,0)处添加文本 # 使用箭头标注特殊点 plt.annotate('最大值点', xy=(np.pi/2, 1), xytext=(3, 0.8), arrowprops=dict(facecolor='black', arrowstyle='->'), fontsize=12) plt.title('添加文本注释', fontsize=14) plt.show() ``` ### 9. 添加图例 虽然图例不是直接的数据,但它是标识数据系列的重要元素: ```python plt.figure(figsize=(8, 5)) line1, = plt.plot(x, np.sin(x), label='sin(x)') line2, = plt.plot(x, np.cos(x), label='cos(x)') # 手动创建图例 plt.legend(handles=[line1, line2], loc='upper right') # 添加图例[^1] plt.title('三角函数图例', fontsize=14) plt.show() ``` ### 10. 添加数据表格 在图表下方添加数据表格: ```python fig, ax = plt.subplots(figsize=(8, 5)) # 绘制柱状图 ax.bar(categories, values, color='skyblue') # 添加表格 table_data = [['类别', '值']] + [[cat, val] for cat, val in zip(categories, values)] ax.table(cellText=table_data, loc='bottom', cellLoc='center') # 调整布局避免重叠 plt.subplots_adjust(bottom=0.2) # 为表格留出空间 ax.set_title('带数据表格的柱状图', fontsize=14) ax.legend(['数据系列']) plt.show() ``` ### 关键技巧总结: 1. **选择正确的绘图函数**: - 折线图:`plot()` - 散点图:`scatter()` - 柱状图:`bar()`(垂直)或`barh()`(水平) - 饼图:`pie()` - 直方图:`hist()` - 箱线图:`boxplot()` 2. **数据标记与样式**: - `color`:控制颜色 - `linestyle`:线型(实线、虚线等) - `marker`:数据点标记形状 - `alpha`:透明度 3. **高级数据表示**: - 误差线:`errorbar()` - 填充区域:`fill_between()` - 堆叠图:`stackplot()`(见引用[5]) 4. **数据标注**: - `text()`:简单文本 - `annotate()`:带箭头的注释 > 注意:添加数据后务必设置清晰的标题、坐标轴标签和图例,确保图表可读性[^1][^3]。 §§相关问题§§ 1. 如何在 Matplotlib 中自定义图例样式和位置? 2. Matplotlib 中如何绘制双Y轴图表? 3. 如何将 Matplotlib 图表导出为高质量图片?</think>在 Python 中使用 Matplotlib 向图表添加数据有多种方法,以下是详细指南: ### 1. 基础数据添加方法 ```python import matplotlib.pyplot as plt import numpy as np # 创建基础数据 x = np.linspace(0, 10, 100) y = np.sin(x) # 创建图表并添加数据 plt.figure(figsize=(10, 6)) plt.plot(x, y) # 添加折线图数据[^1] # 添加散点数据示例 x_points = np.array([1, 3, 5, 7, 9]) y_points = np.array([0.5, 0.8, -0.2, 0.6, -0.5]) plt.scatter(x_points, y_points, color='red', s=80) # 添加散点数据[^3] plt.title('基础数据添加示例') plt.show() ``` ### 2. 多数据集添加方法 ```python plt.figure(figsize=(10, 6)) # 添加多组折线数据 plt.plot(x, np.sin(x), label='正弦曲线', color='blue') plt.plot(x, np.cos(x), label='余弦曲线', color='red', linestyle='--') # 添加柱状图数据 categories = ['A', 'B', 'C', 'D'] values = [25, 40, 30, 45] plt.bar(categories, values, alpha=0.5, label='柱状数据') # 添加柱状图数据[^5] plt.legend() plt.title('多类型数据添加') plt.show() ``` ### 3. 动态数据添加方法 ```python fig, ax = plt.subplots(figsize=(10, 6)) # 初始数据 x_data = [] y_data = [] # 动态添加数据点 for i in range(10): x_data.append(i) y_data.append(np.sin(i)) ax.clear() # 清除当前轴 ax.plot(x_data, y_data, 'bo-') # 添加新数据点 ax.set_title(f'动态添加数据点 (第 {i+1} 个点)') plt.pause(0.5) # 暂停0.5秒 plt.show() ``` ### 4. 高级数据添加技巧 ```python plt.figure(figsize=(10, 6)) # 添加误差线数据 x = [1, 2, 3, 4, 5] y = [10, 15, 12, 18, 16] y_err = [1, 1.5, 0.8, 2, 1.2] plt.errorbar(x, y, yerr=y_err, fmt='o', capsize=5, label='带误差数据') # 添加误差线数据[^3] # 添加填充区域数据 x_fill = np.linspace(0, 10, 100) y1 = np.sin(x_fill) y2 = np.cos(x_fill) plt.fill_between(x_fill, y1, y2, alpha=0.3, label='填充区域') # 添加填充区域数据[^5] # 添加文本标注 plt.annotate('关键点', xy=(5, 0), xytext=(6, 0.5), arrowprops=dict(facecolor='black', arrowstyle='->'), fontsize=12) plt.legend() plt.title('高级数据添加技术') plt.show() ``` ### 5. 从外部数据源添加数据 ```python import pandas as pd # 从CSV文件加载数据 data = pd.read_csv('data.csv') # 假设有日期和销售额两列 plt.figure(figsize=(12, 6)) # 添加时间序列数据 plt.plot(data['日期'], data['销售额'], marker='o', label='日销售额') # 添加移动平均线 moving_avg = data['销售额'].rolling(window=7).mean() plt.plot(data['日期'], moving_avg, color='red', linewidth=2, label='7日移动平均') plt.title('从外部数据源添加数据') plt.legend() plt.xticks(rotation=45) plt.tight_layout() plt.show() ``` ### 6. 数据添加最佳实践 ```python fig, axs = plt.subplots(2, 1, figsize=(10, 8)) # 子图1:添加堆叠面积图数据 x = np.arange(1, 10) y1 = np.array([866, 2335, 5710, 6482, 6120, 1605, 3813, 4428, 4631]) y2 = np.array([433, 1167, 2855, 3241, 1060, 802, 1906, 2214, 3515]) axs[0].stackplot(x, y1, y2, labels=['注册人数', '激活人数']) # 添加堆叠数据[^5] axs[0].set_title('堆叠面积图数据') axs[0].legend() # 子图2:添加箱线图数据 data_to_plot = [np.random.normal(0, std, 100) for std in range(1, 4)] axs[1].boxplot(data_to_plot, labels=['数据集1', '数据集2', '数据集3']) # 添加箱线图数据 axs[1].set_title('箱线图数据') plt.tight_layout() plt.show() ``` ### 关键方法总结: 1. **基础绘图函数**: - `plot()` - 添加折线图数据 - `scatter()` - 添加散点图数据 - `bar()` - 添加柱状图数据 - `hist()` - 添加直方图数据 2. **高级数据添加**: - `errorbar()` - 添加带误差线的数据 - `fill_between()` - 添加填充区域数据 - `stackplot()` - 添加堆叠面积图数据 - `boxplot()` - 添加箱线图数据 3. **动态数据更新**: - 使用循环逐步添加数据点 - 结合`FuncAnimation`实现动画效果 4. **外部数据集成**: - 从Pandas DataFrame添加数据 - 从CSV/Excel文件导入数据 > 提示:添加数据后,使用`plt.legend()`添加图例说明数据系列,使用`plt.xlabel()`和`plt.ylabel()`标注坐标轴,使图表更易理解[^1][^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钱塘小甲子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值