# Python条形图热图直方图可视化精神健康状态(医学数据集)

{% tabs %}
{% tab title="关键词" %}
Python | 条形图 | 热图 | 直方图 | 数据可视化 | Pandas | Matplotlib | 开源精神疾病 | seaborn
{% endtab %}

{% tab title="梗概" %}
目标是比**开源精神疾病**提供的基本报告更深入地挖掘，并了解更多属性之间的相互作用，这可以为所描述的决策者提供信息并有益。

考虑的问题点：

1. 不同性别属性的员工心理健康是否存在显着差异？
2. 不同年龄属性的员工心理健康是否存在显着差异？
3. 提供更多支持的公司是否会让员工心理更健康？
4. 个人对心理健康的态度是否会影响他们的心理健康和寻求治疗？

### 数据可视化工具

#### 条形图

条形图或条形图是用矩形条表示数据类别的图形，矩形条的长度和高度与其所表示的值成正比。 条形图可以水平或垂直绘制。 条形图描述了离散类别之间的比较。 该图的一个轴代表正在比较的特定类别，而另一个轴代表与这些类别相对应的测量值。

Python 中的 matplotlib API 提供了 bar() 函数，该函数可用于 MATLAB 风格或作为面向对象的 API。与轴一起使用的 bar() 函数的语法如下：

该函数根据给定的参数创建一个以矩形为边界的条形图。下面是一个简单的条形图示例，它代表一个学院不同课程的学生人数。

```python
import numpy as np
import matplotlib.pyplot as plt 


# creating the dataset
data = {'C':20, 'C++':15, 'Java':30, 
		'Python':35}
courses = list(data.keys())
values = list(data.values())

fig = plt.figure(figsize = (10, 5))

# creating the bar plot
plt.bar(courses, values, color ='maroon', 
		width = 0.4)

plt.xlabel("Courses offered")
plt.ylabel("No. of students enrolled")
plt.title("Students enrolled in different courses")
plt.show()

```

这里plt.bar(courses, value, color=’maroon’)用于指定以courses列为X轴，values为Y轴来绘制条形图。 color 属性用于设置条形的颜色（本例中为栗色）。 plt.xlabel(“提供的课程”) 和 plt.ylabel(“学生已注册”) 用于标记相应的轴。 plt.title( ) 用于为 graph.plt.show() 创建标题，用于使用前面的命令将图形显示为输出。

**自定义条形图**

```python
import pandas as pd
from matplotlib import pyplot as plt

data = pd.read_csv(r"cars.csv")
data.head()
df = pd.DataFrame(data)

name = df['car'].head(12)
price = df['price'].head(12)

fig = plt.figure(figsize =(10, 7))

plt.bar(name[0:10], price[0:10])

plt.show()

```

从上面的条形图中可以看出，X 轴刻度相互重叠，因此无法正确看到。这样通过旋转X轴刻度，就可以清晰可见。这就是为什么需要定制条形图。

```python
import pandas as pd
from matplotlib import pyplot as plt

data = pd.read_csv(r"cars.csv")
data.head()
df = pd.DataFrame(data)

name = df['car'].head(12)
price = df['price'].head(12)

fig, ax = plt.subplots(figsize =(16, 9))

ax.barh(name, price)

for s in ['top', 'bottom', 'left', 'right']:
	ax.spines[s].set_visible(False)

ax.xaxis.set_ticks_position('none')
ax.yaxis.set_ticks_position('none')

ax.xaxis.set_tick_params(pad = 5)
ax.yaxis.set_tick_params(pad = 10)

ax.grid(b = True, color ='grey',
		linestyle ='-.', linewidth = 0.5,
		alpha = 0.2)

ax.invert_yaxis()

for i in ax.patches:
	plt.text(i.get_width()+0.2, i.get_y()+0.5, 
			str(round((i.get_width()), 2)),
			fontsize = 10, fontweight ='bold',
			color ='grey')

ax.set_title('Sports car and their price in crore',
			loc ='left', )

fig.text(0.9, 0.15, 'Jeeteshgavande30', fontsize = 12,
		color ='grey', ha ='right', va ='bottom',
		alpha = 0.7)

plt.show()

```

**多个条形图**

当一个变量发生变化时要对数据集进行比较时，可以使用多个条形图。 我们可以轻松地将其转换为堆叠面积条形图，其中每个子组都显示在其他子组之上。 可以通过改变条形的厚度和位置来绘制它。 下面的条形图显示了工程分支通过的学生人数：

```python
import numpy as np 
import matplotlib.pyplot as plt 

barWidth = 0.25
fig = plt.subplots(figsize =(12, 8)) 

IT = [12, 30, 1, 8, 22] 
ECE = [28, 6, 16, 5, 10] 
CSE = [29, 3, 24, 25, 17] 

br1 = np.arange(len(IT)) 
br2 = [x + barWidth for x in br1] 
br3 = [x + barWidth for x in br2] 

plt.bar(br1, IT, color ='r', width = barWidth, 
		edgecolor ='grey', label ='IT') 
plt.bar(br2, ECE, color ='g', width = barWidth, 
		edgecolor ='grey', label ='ECE') 
plt.bar(br3, CSE, color ='b', width = barWidth, 
		edgecolor ='grey', label ='CSE') 

plt.xlabel('Branch', fontweight ='bold', fontsize = 15) 
plt.ylabel('Students passed', fontweight ='bold', fontsize = 15) 
plt.xticks([r + barWidth for r in range(len(IT))], 
		['2015', '2016', '2017', '2018', '2019'])

plt.legend()
plt.show() 

```

**堆叠条形图**

堆叠条形图代表不同的组彼此重叠。 条形的高度取决于各组结果组合的高度。 它是从底部到值，而不是从零到值。 下面的条形图代表了团队中男孩和女孩的贡献。

```python
import numpy as np
import matplotlib.pyplot as plt

N = 5

boys = (20, 35, 30, 35, 27)
girls = (25, 32, 34, 20, 25)
boyStd = (2, 3, 4, 1, 2)
girlStd = (3, 5, 2, 3, 3)
ind = np.arange(N) 
width = 0.35

fig = plt.subplots(figsize =(10, 7))
p1 = plt.bar(ind, boys, width, yerr = boyStd)
p2 = plt.bar(ind, girls, width,
			bottom = boys, yerr = girlStd)

plt.ylabel('Contribution')
plt.title('Contribution by the teams')
plt.xticks(ind, ('T1', 'T2', 'T3', 'T4', 'T5'))
plt.yticks(np.arange(0, 81, 10))
plt.legend((p1[0], p2[0]), ('boys', 'girls'))

plt.show()

```

#### 热图

#### 直方图

### 医学数据集清理

### 医学数据集分析
{% endtab %}

{% tab title="关联链接" %}
{% embed url="https://viadean.notion.site/Python-90ebf9d0945c42a1978267c18ddccee7?pvs=4" %}
{% endtab %}
{% endtabs %}

{% content-ref url="../zhi-dian-mi-jin-brief" %}
[zhi-dian-mi-jin-brief](../zhi-dian-mi-jin-brief)
{% endcontent-ref %}
