您所在的位置:首页 - 生活 - 正文生活

梯形图简单程序

素运
素运 05-21 【生活】 982人已围观

摘要标题:Python编程实现经典梯形图梯形图是常见的图形之一,具有简单明了,易于理解等特点,在数据可视化和数据分析中得到了广泛应用。本文将以Python语言为主,介绍如何使用Python编程实现经典梯形

Python编程实现经典梯形图

梯形图是常见的图形之一,具有简单明了,易于理解等特点,在数据可视化和数据分析中得到了广泛应用。本文将以Python语言为主,介绍如何使用Python编程实现经典梯形图。

数据准备

我们需要准备需要展示的数据。我们选择一个简单的示例:某超市部分商品1年内的销售情况。

```python

data = {'日期': ['2020/1/1', '2020/2/1', '2020/3/1', '2020/4/1', '2020/5/1', '2020/6/1'],

'商品A': [300, 325, 345, 370, 400, 410],

'商品B': [220, 250, 280, 300, 320, 340],

'商品C': [180, 200, 220, 240, 250, 280],

'商品D': [150, 170, 190, 210, 220, 235]}

```

数据包含日期和4种商品的销售情况。接下来我们需要将其转换为绘图所需的数据格式。

数据转换

我们使用Python的pandas库进行数据转换,将数据进行透视,使其符合绘制梯形图的要求。

```python

import pandas as pd

df = pd.DataFrame(data)

df.set_index('日期', inplace=True)

df['total'] = df.sum(axis=1)

df2 = pd.DataFrame({'商品名': df.columns[:1],

'销售额': df.sum()[:1],

'总销售额': df['total']})

df2['percent'] = df2['销售额'] / df2['总销售额']

df2.sort_values('percent', ascending=False, inplace=True)

df2['percent_accumulate'] = df2['percent'].cumsum()

```

我们将数据读入pandas的DataFrame中,并将日期设置为DataFrame的行索引。接着,我们新建一个DataFrame(df2),其中包含每个商品的销售额和总销售额,并计算每个商品销售额的占比。我们按照商品销售额占比的大小降序排序,然后计算商品销售额占比的累计值。

绘图准备

matplotlib是Python中常用的绘图库,我们在这里使用其中的pyplot模块进行图形绘制。

```python

import matplotlib.pyplot as plt

import matplotlib.patches as patches

fig, ax = plt.subplots(figsize=(10, 6))

```

新建一个绘图窗口,并设置其大小。

绘制梯形图

```python

for i, row in df2.iterrows():

if i == 0:

ax.add_patch(patches.Rectangle((0, 0), row['percent'], 1, color='C0'))

continue

rect = ax.patches[1]

if row['percent_accumulate'] <= 0.5:

x_lim = rect.get_x() rect.get_width()

y_low = rect.get_y()

height = rect.get_height()

y_high = row['percent'] * height / (1 row['percent_accumulate'])

ax.add_patch(patches.Rectangle((x_lim, y_low), row['percent'], y_high, color='C0'))

else:

y_lim = (1 row['percent_accumulate'] row['percent'] / 2) / row['percent'] * rect.get_width()

height = rect.get_height() * y_lim / (rect.get_width() rect.get_x())

x_low = rect.get_x() rect.get_width() height

ax.add_patch(patches.Rectangle((x_low, y_lim height), height, height, color='C0'))

```

我们使用iterrows()方法遍历df2中的每一行,并根据累计值的大小决定某个梯形的摆放位置和大小。特别地,当达到0.5时,位置和大小分别需要进行计算。最后我们得到一个绘制好的梯形图。

结果可视化

我们将其保存,可视化结果为:

```python

plt.axis('off')

plt.savefig('trapezoid.png', dpi=300, bbox_inches='tight')

plt.show()

```

![trapezoid.png](https://i.loli.net/2021/10/09/vykhgQ5pMDEeBcX.png)

我们可以看到,根据销售额的大小,梯形呈现出逐层递减的形态,直观地反映出商品的销售情况。

Tags: 奥日与精灵意志 宁夏滑水麻将 名堂人形图 詹姆斯邦德007电影 天堂2单机

最近发表

icp沪ICP备2023033053号-25
取消
微信二维码
支付宝二维码

目录[+]