用python对excel进行图表操作

本文代码及数据集来自《超简单:用Python让Excel飞起来(实战150例)》

# 制作柱形图(方法一)
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 4)) # 创建一个绘图窗口
x = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
y = [100, 90, 88, 70, 66, 50, 40, 55, 56, 88, 95, 98]
plt.bar(x, y, width=0.5, align='center', color='k') # 根据给出的数据制作柱形图
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
plt.show()

# 制作柱形图(方法二)
from pyecharts.charts import Bar
x = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
y = [100, 90, 88, 70, 66, 50, 40, 55, 56, 88, 95, 98]
chart = Bar() # 创建一个空白柱形图
chart.add_xaxis(x) # 为图表添加x坐标的值
chart.add_yaxis('销售量', y)
chart.render('柱形图.html') # 将制作的图表保存为网页文件

# 制作折线图
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 4))
x = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
y = [100, 90, 88, 70, 66, 50, 40, 55, 56, 88, 95, 98]
plt.plot(x, y, color='k', linewidth=3, linestyle='solid', marker='s', markersize=10) # 根据给出的数据制作折线图
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
plt.show()

# 制作饼图
import matplotlib.pyplot as plt
plt.figure(figsize=(6, 4))
x = ['上海', '北京', '深圳', '重庆', '大连', '成都', '天津']
y = [120, 150, 88, 70, 96, 50, 40]
plt.pie(y, labels=x, labeldistance=1.1, autopct='%.2f%%', pctdistance=1.5, counterclock=False, startangle=90, explode=[0.3, 0, 0, 0, 0, 0, 0]) # 将饼图中的第1个饼图块分离出来
# 如果不分离饼图块,plt.pie(y,labels=x,labeldistance=1.1,autopct='%.2f%%',pctdistance=1.5,counterclock=False,startangle=90)
# 制作圆环图可通过设置该函数的参数wedgeprops来实现
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
plt.show()

# 添加图表标题和图例
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 4))
x = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
y = [100, 90, 88, 70, 66, 50, 40, 55, 56, 88, 95, 98]
plt.bar(x, y, width=0.5, align='center', color='k', label='销售量(台)') # 根据给出的数据制作柱形图
plt.legend(loc='best', fontsize=12) # 为图表添加图表标题
plt.title(label='销售量对比图', fontdict={'family': 'KaiTi', 'color': 'k', 'size': 25}, loc='center')
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
plt.show()

# 添加数据标签
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 4))
x = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
y = [100, 90, 88, 70, 66, 50, 40, 55, 56, 88, 95, 98]
plt.bar(x, y, width=0.5, align='center', color='k')
for a, b in zip(x, y):
    plt.text(x=a, y=b, s=b, ha='center', va='bottom', fontdict={'family': 'KaiTi', 'color': 'k', 'size': 15}) # 添加并设置数据标签
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
plt.show()

# 添加坐标轴标题
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 4))
x = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
y = [100, 90, 88, 70, 66, 50, 40, 55, 56, 88, 95, 98]
plt.bar(x, y, width=0.5, align='center', color='k')
plt.xlabel('月份', fontdict={'family': 'SimSun', 'color': 'k', 'size': 12}, labelpad=2)
plt.ylabel('销售量(台)', fontdict={'family': 'SimSun', 'color': 'k', 'size': 12}, labelpad=2)
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
plt.show()

# 添加网格线
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 4))
x = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
y = [100, 90, 88, 70, 66, 50, 40, 55, 56, 88, 95, 98]
plt.plot(x, y, color='k', linewidth=3, linestyle='solid')
plt.grid(b=True, axis='both', color='r', linestyle='dotted', linewidth=1)
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
plt.show()

# 调整坐标轴的刻度范围
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 4))
x = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
y = [100, 90, 88, 70, 66, 50, 40, 55, 56, 88, 95, 98]
plt.plot(x, y, color='k', linewidth=3, linestyle='solid')
plt.title(label='销售量趋势图', fontdict={'family': 'KaiTi', 'color': 'k', 'size': 25}, loc='center')
plt.ylim(20, 120) # 设置y轴的刻度范围
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
plt.show()

# 在一张画布中绘制多个图表
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 6))
x = ['上海', '北京', '深圳', '重庆', '大连', '成都', '天津']
y = [120, 150, 88, 70, 96, 50, 40]
plt.subplot(2, 2, 1) # 将整张画布划分为2行2列,并指定在第1个区域中绘制图表
plt.bar(x, y, width=0.5, align='center', color='r')
plt.subplot(2, 2, 2)
plt.pie(y, labels=x, labeldistance=1.1, autopct='%.2f%%', pctdistance=1.6)
plt.subplot(2, 2, 3)
plt.plot(x, y, color='r', linewidth=3, linestyle='solid')
plt.subplot(2, 2, 4)
plt.stackplot(x, y, color='r')
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
plt.show()

# 在一个工作表中插入图表
import pandas as pd
import matplotlib.pyplot as plt
import xlwings as xw
figure = plt.figure(figsize=(10, 4))
data = pd.read_excel('各月销售数量表.xlsx', sheet_name='1月')
x = data['配件名称']
y = data['销售数量']
plt.bar(x, y, width=0.5, align='center', color='k')
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
app = xw.App(visible=False, add_book=False)
workbook = app.books.open('各月销售数量表.xlsx') # 打开要插入图表的工作簿
worksheet = workbook.sheets['1月']
worksheet.pictures.add(figure, left=500) # 在指定工作表中插入柱形图
workbook.save('各月销售数量表1.xlsx')
workbook.close()
app.quit()

# 在一个工作簿的所有工作表中插入图表
import pandas as pd
import matplotlib.pyplot as plt
import xlwings as xw
all_data = pd.read_excel('各月销售数量表.xlsx', sheet_name=None)
app = xw.App(visible=False, add_book=False)
workbook = app.books.open('各月销售数量表.xlsx')
worksheet = workbook.sheets
for i in all_data:
    figure = plt.figure(figsize=(10, 4))
    data = all_data[i]
    x = data['配件名称']
    y = data['销售数量']
    plt.bar(x, y, width=0.5, align='center', color='k')
    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
    plt.rcParams['axes.unicode_minus'] = False
    worksheet[i].pictures.add(figure, left=500)
workbook.save('各月销售数量表1.xlsx')
workbook.close()
app.quit()

# 制作散点图
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import linear_model
figure = plt.figure(figsize=(10, 4))
data = pd.read_excel('客户满意度表.xlsx', sheet_name='Sheet1')
x = data['收货天数(天)']
y = data['客户满意度']
plt.scatter(x, y, s=100, marker='o', color='k')
x1 = x.to_numpy().reshape(-1, 1) # 将自变量数据转换为二维数组格式
model = linear_model.LinearRegression().fit(x1, y) # 创建并训练了一个线性回归模型
y1 = model.predict(x1) 
plt.plot(x, y1, color='k', linewidth='3', linestyle='solid') # 根据预测结果制作了一条线性趋势线
plt.title(label='收货天数与客户满意度关系图', fontdict={'family': 'KaiTi', 'color': 'k', 'size': 25}, loc='center')
plt.xlabel('收货天数(天)', fontdict={'family': 'SimSun', 'color': 'k', 'size': 12}, labelpad=2)
plt.ylabel('客户满意度', fontdict={'family': 'SimSun', 'color': 'k', 'size': 12}, labelpad=2)
plt.xlim(0, 22.5) # 设置坐标轴的刻度范围
plt.ylim(0, 12)
plt.rcParams['axes.unicode_minus'] = False
plt.show()

# 制作涟漪特效散点图
import pandas as pd
import pyecharts.options as opts
from pyecharts.charts import EffectScatter
data = pd.read_excel('客户满意度表.xlsx', sheet_name='Sheet1')
x = data['收货天数(天)']
y = data['客户满意度']
chart = EffectScatter()
chart.add_xaxis(x) # 为散点图添加x坐标的值
chart.add_yaxis(series_name='收货天数(天),客户满意度', y_axis=y, label_opts=opts.LabelOpts(is_show=False), symbol_size=15)
chart.set_global_opts(title_opts=opts.TitleOpts(title='收货天数与客户满意度散点图'), yaxis_opts=opts.AxisOpts(type_='value', name='客户满意度', name_location='middle', name_gap=40), xaxis_opts=opts.AxisOpts(type_='value', name='收货天数(天)', name_location='middle', name_gap=40), tooltip_opts=opts.TooltipOpts(trigger='item', formatter='{a}:{c}')) # 为图表添加图表标题和坐标轴标题
chart.render('散点图.html') # 将制作的散点图保存为一个网页文件

# 制作气泡图
import matplotlib.pyplot as plt
import pandas as pd
plt.figure(figsize=(10, 5))
data = pd.read_excel('销售统计表.xlsx', sheet_name='Sheet1')
n = data['产品名称'] # 指定“产品名称”的数据作为数据标签的内容
x = data['销售量(台)']
y = data['销售额(元)']
z = data['毛利率(%)'] # 指定“毛利率(%)”作为气泡大小
plt.scatter(x, y, s=z * 5000, color='r', marker='o')
plt.xlabel('销售量(台)', fontdict={'family': 'Microsoft YaHei', 'color': 'k', 'size': 12}, labelpad=2)
plt.ylabel('销售额(元)', fontdict={'family': 'Microsoft YaHei', 'color': 'k', 'size': 12}, labelpad=2)
plt.title('销售量、销售额与毛利率关系图', fontdict={'family': 'Microsoft YaHei', 'color': 'k', 'size': 20}, loc='center')
for a, b, c in zip(x, y, n):
    plt.text(x=a, y=b, s=c, ha='center', va='center', fontsize=12, color='w')
plt.xlim(20, 100)
plt.ylim(0, 50000)
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
plt.show()

# 制作组合图表
import pandas as pd
import matplotlib.pyplot as plt
plt.figure(figsize=(12, 5))
data = pd.read_excel('各月销售额统计表.xlsx', sheet_name='Sheet1')
x = data['月份']
y1 = data['销售额(万元)']
y2 = data['同比增长率']
plt.bar(x, y1, color='y', label='销售额(万元)') # 使用第1组y坐标值绘制了一个柱形图
plt.legend(loc='upper left', fontsize=12)
plt.twinx()
plt.plot(x, y2, color='r', linewidth='3', label='同比增长率') # 使用第2组y坐标值绘制了一个折线图
plt.legend(loc='upper right', fontsize=10)
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
plt.show()

# 制作雷达图
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
colors = ['r', 'g', 'y'] # 设置每个员工在图表中的显示颜色
data = pd.read_excel('员工能力评价表.xlsx', sheet_name='Sheet1', index_col=0).T
staff = data.index.to_list() # 从行索引中获取员工名称
# 如只显示“A员工”的数据,则将这行代码修改为“staff=['A员工']”
column = data.columns.to_list() # 从列索引中获取评价指标名称
angle = np.linspace(0.1 * np.pi, 2.1 * np.pi, len(column), endpoint=False) # 根据评价指标的个数对圆形进行等分
angle = np.concatenate((angle, [angle[0]])) # 连接刻度线数据
column = np.concatenate((column, [column[0]])) # 连接指标名称数据
figure = plt.figure(figsize=(8, 6)) # 创建了一张宽8英寸、高6英寸的画布
ax = figure.add_subplot(1, 1, 1, projection='polar') # 将这张画布划分为1行1列,指定在第1个区域中绘图,并设置坐标体系为极坐标
for i, j in enumerate(staff):
    staff_data = data.loc[j] # 获取员工的指标分值数据
    staff_data = np.concatenate((staff_data, [staff_data[0]])) # 连接员工的指标分值数据
    ax.plot(angle, staff_data, linestyle='-', linewidth=2, color=colors[i], label=str(j)) # 制作雷达图
    ax.fill(angle, staff_data, color=colors[i], alpha=0.7) # 为雷达图填充颜色
ax.legend(loc=4, bbox_to_anchor=(1.15, -0.07)) # 参数loc=4表示将图例放置在右下角
ax.set_thetagrids(angle * 180 / np.pi, column, fontsize=12)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.show()

# 制作漏斗图
import pyecharts.options as opts
from pyecharts.charts import Funnel
x = ['浏览商品', '放入购物车', '生成订单', '支付订单', '完成交易']
y = [1200, 800, 300, 280, 250]
data = [i for i in zip(x, y)]
chart = Funnel()
chart.add(series_name='人数', data_pair=data, label_opts=opts.LabelOpts(is_show=True, position='inside'), tooltip_opts=opts.TooltipOpts(trigger='item', formatter='{a}:{c}')) # 添加并设置图表的系列名称、系列数据值和提示框等
chart.set_global_opts(title_opts = opts.TitleOpts(title='电商网站流量转化漏斗图', pos_left='center'), legend_opts=opts.LegendOpts(is_show=False))
chart.render('漏斗图.html')

# 制作水球图
import pyecharts.options as opts
from pyecharts.charts import Liquid
actual_sale1 = 900000
actual_sale2 = 1589000
actual_sale3 = 285200
target_sale = 1200000 # 指定了3个地区共同的目标销售业绩
chart = Liquid()
chart.set_global_opts(title_opts=opts.TitleOpts(title='各地区销售业绩达成率', pos_left='center'))
chart.add(series_name='北京', data=[actual_sale1 / target_sale], shape='circle', center=['20%', '50%'])
chart.add(series_name='上海', data=[actual_sale2 / target_sale], shape='circle', center=['50%', '50%'])
chart.add(series_name='成都', data=[actual_sale3 / target_sale], shape='circle', center=['80%', '50%'])
chart.render('水球图.html')

# 制作仪表盘
import pyecharts.options as opts
from pyecharts.charts import Gauge
chart = Gauge()
chart.add(series_name='业务指标', data_pair=[('完成率', 70.95)], split_number=10, radius='75%', start_angle=225, end_angle=-45, is_clock_wise=True, title_label_opts=opts.GaugeTitleOpts(font_size=30, color='red', font_family='Microsoft YaHei'), detail_label_opts=opts.GaugeDetailOpts(is_show=False))
chart.set_global_opts(legend_opts=opts.LegendOpts(is_show=False), tooltip_opts=opts.TooltipOpts(is_show=True, formatter='{a}<br/>{b}:{c}%'))
chart.render('仪表盘.html')

# 制作词云图
import pandas as pd
import pyecharts.options as opts
from pyecharts.charts import WordCloud
data = pd.read_excel('图书销量表.xlsx', sheet_name='Sheet1')
name = data['书名']
value = data['销售量(本)']
data1 = [i for i in zip(name, value)] # 将列表name和value中对应的元素配对打包成一个个元组,然后将这些元组组成一个列表
chart = WordCloud()
chart.add('销售量(本)', data_pair=data1, shape='star', word_size_range=[10, 60])
chart.set_global_opts(title_opts=opts.TitleOpts(title='图书销量分析', title_textstyle_opts=opts.TextStyleOpts(font_size=30)), tooltip_opts=opts.TooltipOpts(is_show=True))
chart.render('词云图.html')
  • 7
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python wlxings PDF是指使用Python语言处理PDF文件的相关技术和工具。 Python是一种广泛使用的编程语言,具有简洁、易读、易学的特点,被广泛用于Web开发、数据分析和科学计算等领域。在处理PDF文件方面,Python也有很多成熟的库和工具可供使用。 使用Python读取和提取PDF文件的文本内容是比较常见的需求。Python的第三方库PyPDF2可以实现这一功能,可以读取PDF文件中的文字内容,并进行相应的处理和提取。使用PyPDF2,可以方便地读取PDF文件中的文字、获取页面数量、提取特定页面内容等。 除了读取PDF文件的文本内容,Python还可以进行PDF文件的创建、编辑和转换。使用Fpdf库,可以使用Python生成PDF文件,并进行自定义排版、添加文字、图片等操作。使用ReportLab库,可以生成更复杂的PDF文件,包括表格、图表、图像等。而PDFMiner库则提供了更底层的PDF操作能力,可以进行更复杂的PDF解析和处理。 除了上述常见的库之外,Python还有其他很多处理PDF文件的第三方库和工具可供选择,如PDFReader、PyMuPDF、Camelot等。 总而言之,Python wlxings PDF是指使用Python语言进行PDF文件的读取、提取、创建、编辑和转换操作Python提供了丰富的库和工具,可以满足不同需求的PDF处理任务。 ### 回答2: Python的库xlwings可以与Excel进行交互,允许用户使用Python编写代码来读取、写入和操作Excel文件。它还可以将Excel文件转换为PDF格式。但是,xlwings不直接支持PDF操作,因此如果你想将Excel文件转换为PDF,需要使用其他库或工具来完成。 一种常用的方法是使用Python的win32com库与Microsoft Excel进行交互,在Excel中将文件另存为PDF格式。win32com库允许Python脚本与其他Windows应用程序进行交互,包括Microsoft Office套件。你可以使用win32com库打开Excel文件,执行"SaveAs"操作,并将文件保存为PDF格式。以下是一个示例代码: ``` python import win32com.client as win32 excel = win32.Dispatch('Excel.Application') wb = excel.Workbooks.Open(r'C:\path\to\your\excel_file.xlsx') ws = wb.Sheets('Sheet1') pdf_file = r'C:\path\to\your\pdf_file.pdf' ws.ExportAsFixedFormat(0, pdf_file) wb.Close(True) excel.Quit() ``` 在这个示例中,我们使用了win32com库打开Excel文件,并将所需的工作表指定为Sheet1。我们使用ExportAsFixedFormat方法将工作表保存为PDF文件。最后,我们关闭了工作簿并退Excel应用程序。 另一种方法是使用Python的reportlab库,这是一个用于创建PDF文件的强大工具。你可以使用reportlab库读取Excel数据并将其放入PDF模板中,然后导为PDF文件。这种方法相对复杂一些,需要一定的编程技巧。以下是一个简单的示例代码来演示reportlab的使用: ``` python from reportlab.lib.pagesizes import letter from reportlab.pdfgen import canvas import xlrd pdf_file = r'C:\path\to\your\pdf_file.pdf' excel_file = r'C:\path\to\your\excel_file.xlsx' workbook = xlrd.open_workbook(excel_file) worksheet = workbook.sheet_by_name('Sheet1') canvas = canvas.Canvas(pdf_file, pagesize=letter) for row in range(worksheet.nrows): for col in range(worksheet.ncols): cell_value = worksheet.cell_value(row, col) canvas.drawString(100+col*50, 700-row*20, str(cell_value)) canvas.save() ``` 在这个示例中,我们使用reportlab库创建了一个canvas对象,并在每个单元格的位置绘制Excel文件中的数据。最后,我们保存了canvas对象并将其另存为PDF文件。 以上是两种常用的方法将Excel文件转换为PDF文件的Python实现。具体使用哪种方法取决于你的需求和个人偏好。 ### 回答3: Python 是一种常用的编程语言,可以用来处理各种类型的数据。使用 Python,我们可以很方便地操作 PDF 文件。 要在 Python 中处理 PDF,可以使用第三方库 PyPDF2。该库提供了一组功能丰富的方法,可以读取、写入和操作 PDF 文件。 具体来说,使用 PyPDF2 可以实现以下操作: 1. 读取 PDF 文件:我们可以使用 PyPDF2 打开一个 PDF 文件,并读取其中的内容。这样我们就可以获取文本、图片、链接等信息。 2. 提取文本内容:PyPDF2 可以提取 PDF 文件中的文本内容,包括文字、段落和标题等。这样我们可以对这些文本进行进一步的分析和处理。 3. 合并和拆分 PDF 文件:PyPDF2 还可以将多个 PDF 文件合并成一个,或者将一个 PDF 文件拆分成多个。这在需要整合或分割 PDF 文件时非常有用。 4. 添加和删除页面:我们可以使用 PyPDF2 在现有的 PDF 文件中添加新的页面,也可以删除不需要的页面。这样我们可以自定义修改 PDF 文件的内容。 5. 旋转和裁剪页面:PyPDF2 还支持对 PDF 文件中的页面进行旋转和裁剪。这在需要调整页面方向或大小时非常方便。 总之,通过使用 Python 和 PyPDF2,我们可以很方便地对 PDF 文件进行各种操作,包括读取、提取、合并、拆分、添加、删除、旋转和裁剪等。这让我们能够更灵活地处理和管理 PDF 文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值