数据可视化

10种图例

1. 直线图

image-20230130163439488

2. 条形图

image-20230130163343898

3. 水平条形图

image-20230130163255538

4. 饼图

image-20230130163146291

5. 散点图

image-20230130163509280

6. 六角箱图

image-20230130163538952

7. 直方图

image-20230130163606908

8. 密度图

image-20230130163654651

9. 箱形图

image-20230130163726429

10. 面积图

image-20230130163751192

Matplotlib

image-20230130164036533

使用matplotlib绘制图片

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# s = pd.Series(
#     [1, 2, 3],
#     index=list('ABC')
# )
# print(s)
#
# s.plot()

# 创建Df
df = pd.DataFrame({
    "A": [1, 2, 3, 4]
})

df["B"] = df["A"] ** 2
print(df)

# 开始绘图

# 统一建议设置
plt.rcParams['axes.unicode_minus'] = False
# mac 设置中文字体
plt.rcParams['font.sans-serif'] = ['Hiragino Sans GB']
# windows 中文设置
# plt.rcParams['font.sans-serif'] = ['SimHei']

"""
设置样式
facecolor: 更改背景色为白色
figsize: 长宽
dpi: 像素
6*100 6*100
"""
plt.figure(facecolor="white", figsize=(6, 6), dpi=100)

# 创建常见默认x,y
plt.plot(df["A"], df["B"])

"""
设置标题
fontsize: 字体大小
color: 颜色
rotation: 旋转角度
labelpad: 标题与表间隔
"""
plt.title("我是标题", fontsize=30, color='r')
plt.xlabel("X轴", fontsize=24, color='g')
plt.ylabel("Y轴", fontsize=24, color='b', rotation=0, labelpad=15)

# 坐标轴值的区间
plt.xlim([-1, 5])
plt.ylim([0, 20])

# 坐标轴的值 也可以进行样式设置
# plt.xticks([1, 2, 3, 4, 5], fontsize=20)
# plt.yticks([0, 5, 10, 15, 20], fontsize=20)


# major:主刻度 minor:次刻度
# x轴 每个值之间的间距
plt.gca().xaxis.set_major_locator(
    plt.MultipleLocator(2)
)
# x轴 每个值之间刻度标
plt.gca().xaxis.set_minor_locator(
    plt.MultipleLocator(0.5)
)

# y轴 每个值之间的间距
plt.gca().yaxis.set_major_locator(
    plt.MultipleLocator(5)
)
# y轴 每个值之间刻度标
plt.gca().yaxis.set_minor_locator(
    plt.MultipleLocator(1)
)

# 网格展示,加颜色
plt.grid(color='y')

plt.show()

实战

import uuid
import time
import datetime
import traceback
import matplotlib.pyplot as plt

# 关闭交互模式
plt.switch_backend('Agg')
# 关闭告警
plt.set_loglevel('WARNING')


def data_2_line_chart(x, y, label, event_time):
    """
    将数据绘制为折线图

    :param: x 轴数据
    :param: y 轴数据
    :param: label 指标 e.g. test11
    :param: event_time 活动时间 e.g. {'start_time': 66666666666, 'end_time': 755555555555}
    :return: image_path + name
    """
    name = uuid.uuid4()
    path = f'{name}.png'
    # 背景:白色,大小:2500*600
    fig, ax = plt.subplots(facecolor="white", figsize=(25, 6), dpi=100)
    # 去除上左右边框
    ax.spines['top'].set_color('none')
    ax.spines['left'].set_color('none')
    ax.spines['right'].set_color('none')
    # 绘制,加实心·
    ax.plot(x, y, marker='o')
    # 填充指定区间
    x_fill = [i for i in x if event_time["start_time"] > i > event_time["end_time"]]
    ax.fill_between(x_fill, 0, max(y), alpha=0.3, facecolor='r')
    # y轴数据
    # ax.set_ylim([0, max(MetricValue)])
    #  设置就在 y 轴方向显示网格线
    ax.grid(axis='y', color='gray', linestyle='--')
    # 指标
    ax.legend(frameon=False, labels=[label], bbox_to_anchor=(0, 1.02), loc=3, borderaxespad=0)
    # x轴,每个值之间1个刻度
    ax.xaxis.set_minor_locator(
        plt.MultipleLocator(1)
    )
    # x轴,每8个值展示
    ax.xaxis.set_major_locator(
        plt.MultipleLocator(8)
    )
    # 保存图片
    ax.figure.savefig(path)
    plt.close(fig)
    return path