假设有一购房数据表,其中学历数据有“高中及以下”、“大专/高职”、“大学本科”三类,限购政策数据有“作用不大”、“有一定作用”、“有明显作用”三类,请用Python制作堆积柱状图,探究不同学历对限购政策的观点是否有所不同
时间: 2023-10-17 19:05:15 浏览: 65
好的,以下是Python代码实现堆积柱状图的方法:
首先,我们需要导入几个必要的库:pandas, matplotlib.pyplot, numpy。pandas用于读取数据,matplotlib.pyplot用于绘图,numpy用于生成随机数据。
```python
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
```
然后,我们需要读取数据表并进行预处理。假设数据表的文件名为data.csv,其中包含两列数据:学历和限购政策。我们可以使用pandas库中的read_csv函数读取数据,并使用crosstab函数生成交叉表,其中行为学历类别,列为限购政策类别,值为统计数值。
```python
data = pd.read_csv('data.csv')
table = pd.crosstab(data['学历'], data['限购政策'])
```
接下来,我们需要将交叉表转换为堆积柱状图的数据格式。我们可以使用numpy库中的cumsum函数将每一列的值逐行累加,得到一个新的二维数组。
```python
stacked_data = np.cumsum(table, axis=1)
```
最后,我们可以使用matplotlib.pyplot库中的bar函数绘制堆积柱状图。需要注意的是,我们需要为每一个类别绘制一条竖直的线,以区分不同的类别。
```python
plt.bar(table.index, table.iloc[:,0], color='b')
plt.bar(table.index, table.iloc[:,1], bottom=stacked_data.iloc[:,0], color='g')
plt.bar(table.index, table.iloc[:,2], bottom=stacked_data.iloc[:,1], color='r')
plt.legend(['作用不大', '有一定作用', '有明显作用'])
plt.xlabel('学历')
plt.ylabel('数量')
plt.title('不同学历对限购政策的观点')
plt.show()
```
完整代码如下:
```python
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
data = pd.read_csv('data.csv')
table = pd.crosstab(data['学历'], data['限购政策'])
stacked_data = np.cumsum(table, axis=1)
plt.bar(table.index, table.iloc[:,0], color='b')
plt.bar(table.index, table.iloc[:,1], bottom=stacked_data.iloc[:,0], color='g')
plt.bar(table.index, table.iloc[:,2], bottom=stacked_data.iloc[:,1], color='r')
plt.legend(['作用不大', '有一定作用', '有明显作用'])
plt.xlabel('学历')
plt.ylabel('数量')
plt.title('不同学历对限购政策的观点')
plt.show()
```
以上代码将生成一张堆积柱状图,横轴为学历类别,纵轴为数量,颜色区分不同的限购政策类别。您可以根据需要对代码进行修改和调整。
阅读全文