简单好用的折线图绘制!

折线图的概念及作用:

折线图(Line Chart)是一种常见的图表类型,用于展示数据的变化趋势或时间序列数据。它通过一系列的数据点(通常表示为坐标系中的点)与这些点之间的线段相连,直观地展示变量随着时间或其他因素变化的情况。折线图适用于比较多个数据集的变化趋势,尤其是在时间序列数据分析中,常用于反映数据的连续性和波动。

1. 折线图的基本概念

折线图是由坐标系中的一系列数据点和这些点之间的直线段组成。每个数据点的横坐标通常代表某一时间点或顺序,而纵坐标则表示对应的数值(如销量、温度、股票价格等)。通过连接这些点,形成折线图,可以清晰地看到数据的波动趋势和变化规律。

  • 横坐标(X轴):通常表示自变量,例如时间、日期、阶段等。它是连续的或离散的。
  • 纵坐标(Y轴):表示因变量,即需要观察的数据值。
  • 数据点:每一个数据点对应一个横坐标和纵坐标的组合,表示某个时刻或某个条件下的观测值。
  • 折线:通过连接数据点,形成的线条展示了数据的变化趋势。

2. 折线图的作用

折线图的作用主要体现在以下几个方面:

a. 展示数据变化的趋势

折线图最常见的用途是展示数据随时间或其他因素变化的趋势。通过观察折线的走势,可以直观地了解数据随时间的波动和变化模式。

  • 例如,绘制一年中每个月的气温变化折线图,可以清晰地看出气温的升降趋势,揭示季节性变化。
b. 比较多个数据系列

折线图还可以用来比较多个数据系列的变化趋势。当有多个变量或不同类别的时间序列数据时,可以将它们绘制在同一张图表上,通过不同的颜色、线型或符号区分不同的数据系列。

  • 例如,比较不同公司在同一时间段内的股票价格变化,或不同地区的气温变化。
c. 揭示数据的波动性和周期性

折线图不仅能展示数据的趋势,还能揭示数据中的周期性波动(如季节变化)、突发性变化、趋势反转等重要特征。

  • 例如,通过绘制股票市场的折线图,可以看到市场的波动性,识别牛市和熊市的周期性变化。
d. 识别异常值或趋势变化点

折线图能够帮助观察数据中的异常值或突变点。例如,突如其来的数据激增或暴跌在折线图中会形成尖锐的波动,容易被观察者识别出来。

  • 例如,销售额的急剧下降可能是某个重要事件导致的,需要进一步分析。

3. 折线图的类型

根据数据的特点和需求,折线图可以有不同的变种,常见的有:

a. 基本折线图(Simple Line Chart)

最基本的折线图,展示一个数据系列随时间的变化趋势。

b. 多重折线图(Multiple Line Chart)

适用于比较多个数据系列。每个系列通过不同的颜色或线型区分,以便在同一图表中显示多个变量的变化趋势。

c. 堆叠折线图(Stacked Line Chart)

在多重折线图的基础上,堆叠折线图显示了不同数据系列之间的叠加关系。每个数据系列的值在前一系列之上堆叠起来,适用于表示部分与整体的关系。

  • 例如,展示各个产品在某个月的销售额时,可以通过堆叠折线图看到不同产品的销售额与总销售额之间的关系。
d. 平滑折线图(Smooth Line Chart)

在基本折线图的基础上,通过平滑算法(如样条插值等)使得折线不那么尖锐,适用于数据变化较为平稳、且不要求每个数据点之间的波动都十分显著的情况。


代码:

第一部分:加载所需包

library(ggplot2)
library(dplyr)
library(tidyr)
library(gridExtra)
library(openxlsx)
  • ggplot2:用于数据可视化。
  • dplyr:用于数据操作。
  • tidyr:用于数据整理(例如宽表和长表的转换)。
  • gridExtra:用于排版多个图表。
  • openxlsx:用于读取和写入 Excel 文件。

第二部分:数据加载与清理

mydata <- read.xlsx("gpt.xlsx")
mydata <- subset(mydata, mydata$final != 3)
mydata <- mydata %>%mutate(gpt = factor(gpt, levels = c("gpt3.5", "gpt4")),system = factor(system, levels = c("system2", "system1")),query = factor(query, levels = c("query1", "query2")),final_new = factor(final, labels = c("不参加", "参加")),sort_new = factor(sort, labels = paste0(seq(10, 90, by = 10), "%")))
  1. 数据加载:

    • read.xlsx("gpt.xlsx"):读取 Excel 文件 gpt.xlsx
  2. 数据过滤:

    • subset(mydata, mydata$final != 3):去除 final 列中值为 3 的数据。
  3. 数据清理:

    • 使用 mutate 对数据进行格式化处理:
      • gptsystemquery 列转为因子变量,设定排序规则。
      • finalsort 列创建新的因子变量,并赋予更易读的标签。

第三部分:分组并汇总数据

result_wide <- mydata %>%group_by(gpt, system, query, final_new) %>%summarise(Frequency = n(), .groups = 'drop') %>%pivot_wider(names_from = final_new, values_from = Frequency, values_fill = list(Frequency = 0)) %>%mutate(Proportion = 参加 / (不参加 + 参加))
  1. 分组与汇总:

    • group_by(gpt, system, query, final_new):按 gptsystemqueryfinal_new 进行分组。
    • summarise(Frequency = n(), .groups = 'drop'):计算每组的频数,生成 Frequency 列。
  2. 宽表转换:

    • pivot_wider(names_from = final_new, values_from = Frequency, values_fill = list(Frequency = 0))
      • final_new 的值("不参加" 和 "参加")作为新列,值来源于 Frequency
      • 未匹配的单元格填充为 0
  3. 计算比例:

    • mutate(Proportion = 参加 / (不参加 + 参加)):计算 "参加" 在总频数中的比例,结果存储在 Proportion 列中。

第四部分:绘制折线图

plota <- ggplot(result_wide, aes(x = system, y = Proportion, color = gpt, linetype = query, group = interaction(gpt, query))) +geom_line(linewidth = 1.1) +geom_point(size = 2) +labs(title = "比对折线图", x = "system", y = "参加比例") +theme_minimal() +theme(plot.title = element_text(hjust = 0.5),legend.title = element_blank(),legend.position = "bottom") +scale_color_manual(values = c("gpt3.5" = "red", "gpt4" = "green")) +scale_linetype_manual(values = c("query1" = "solid", "query2" = "dashed", "query4" = "dotted"),labels = c("query1" = "query1-单次博弈", "query2" = "query2-多次博弈", "query4" = "query4-聚合结果的多次博弈")) +scale_x_discrete(labels = c("system1" = "system1【AI】", "system2" = "system2【Human】"))
核心部分解释:
  1. ggplot 初始化:

    • aes(x = system, y = Proportion, color = gpt, linetype = query, group = interaction(gpt, query))
      • xsystem 作为 x 轴变量。
      • yProportion 作为 y 轴变量(参加比例)。
      • colorgpt 区分颜色。
      • linetypequery 区分线型(例如虚线、实线等)。
      • group:按照 gptquery 的组合分组,确保线条连续。
  2. 绘制折线和点:

    • geom_line(linewidth = 1.1):绘制折线,设置线宽为 1.1。
    • geom_point(size = 2):在线上叠加点,设置点大小为 2。
  3. 添加标题和标签:

    • labs(title = "比对折线图", x = "system", y = "参加比例"):设置图表标题和轴标签。
  4. 主题样式:

    • theme_minimal():应用简约主题。
    • theme(...)
      • plot.title = element_text(hjust = 0.5):标题居中。
      • legend.title = element_blank():去除图例标题。
      • legend.position = "bottom":将图例放在底部。
  5. 自定义颜色和线型:

    • scale_color_manual(...):指定颜色:
      • "gpt3.5" 为红色,"gpt4" 为绿色。
    • scale_linetype_manual(...)
      • values:指定线型(实线、虚线、点线)。
      • labels:为每种 query 提供易读的标签描述。
  6. 自定义 x 轴标签:

    • scale_x_discrete(labels = c("system1" = "system1【AI】", "system2" = "system2【Human】"))
      • system1system2 的标签分别替换为 system1【AI】system2【Human】

第五部分:保存图表

ggsave("plota.png", plota, width = 8, height = 6, bg = "white")
  • 将绘制的图形 plota 保存为 PNG 文件:
    • 文件名为 plota.png
    • 宽度和高度分别为 8 英寸和 6 英寸。
    • 背景色为白色。

总结:

# ------- 加载所需包 -------
library(ggplot2)
library(dplyr)
library(tidyr)
library(gridExtra)
library(openxlsx)# ------- 加载并清理数据 -------
mydata <- read.xlsx("gpt.xlsx")
mydata <- subset(mydata, mydata$final != 3)
mydata <- mydata %>%mutate(gpt = factor(gpt, levels = c("gpt3.5", "gpt4")),system = factor(system, levels = c("system2", "system1")),query = factor(query, levels = c("query1", "query2")),final_new = factor(final, labels = c("不参加", "参加")),sort_new = factor(sort, labels = paste0(seq(10, 90, by = 10), "%")))# ------- 分组并汇总数据 -------
result_wide <- mydata %>%group_by(gpt, system, query, final_new) %>%summarise(Frequency = n(), .groups = 'drop') %>%pivot_wider(names_from = final_new, values_from = Frequency, values_fill = list(Frequency = 0)) %>%mutate(Proportion = 参加 / (不参加 + 参加))# 打印汇总数据
print(result_wide)# ------- 绘制折线图 -------
plota <- ggplot(result_wide, aes(x = system, y = Proportion, color = gpt, linetype = query, group = interaction(gpt, query))) +geom_line(linewidth = 1.1) +geom_point(size = 2) +labs(title = "比对折线图", x = "system", y = "参加比例") +theme_minimal() +theme(plot.title = element_text(hjust = 0.5),legend.title = element_blank(),legend.position = "bottom") +scale_color_manual(values = c("gpt3.5" = "red", "gpt4" = "green")) +scale_linetype_manual(values = c("query1" = "solid", "query2" = "dashed", "query4" = "dotted"),labels = c("query1" = "query1-单次博弈", "query2" = "query2-多次博弈", "query4" = "query4-聚合结果的多次博弈")) +scale_x_discrete(labels = c("system1" = "system1【AI】", "system2" = "system2【Human】"))# 显示图表
print(plota)# ------- 保存图表 -------
ggsave("plota.png", plota, width = 8, height = 6, bg = "white")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/61213.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单线性DP

数字三角形--简单线性DP 题目链接&#xff1a;数字三角形 解题代码&#xff1a; import java.io.BufferedReader; import java.io.InputStreamReader;public class Main {static int N510;static int INF (int) -1e9;static String[] q;static int[][]fnew int[N][N];static …

【数据结构】双向链表、单向循环链表、双向循环链表、栈、链栈

目录 一、双向链表 定义类和封装函数以及测试样例如下&#xff1a; 注意事项&#xff1a; 二、循环链表 单循环列表的类和函数封装如下&#xff1a; 注意事项&#xff1a; 三、双向循环链表 结点类和双循环链表的定义部分 函数封装之判空和尾插 双循环链表遍历 双循…

win10中使用ffmpeg的filter滤镜

1 给视频加文字水印 1.1 添加播放时间 ffmpeg -i input.mp4 -vf "drawtextfontfileC\\:/Windows/fonts/consola.ttf:fontsize30:fontcolorwhite:timecode00\:00\:00\:00:rate25:textTCR\::boxcolor0x000000AA:box1:x20:y20" -y output.mp4 在视频的x20:y20位置添加t…

CentOS7执行yum命令报错,已加载插件:fastestmirrorLoading mirror speeds from cached hostfile

一、出现一下异常问题&#xff0c;表示域名没有配置或配置错误 问题一&#xff1a; 0curl: (6) Could not resolve host: mirrors.aliyun.com; 未知的错误 问题二&#xff1a;虚拟机使用ping主机&#xff0c;提示network unreachable 2.原因分析 出现这个问题是因为yum在安装…

基于WEB的房屋出租管理系统设计

摘 要 在当今社会的蓬勃发展的现状下&#xff0c;网络与我们的生活息息相关。工作、生活、休闲我们都利用着网络带给我们 的便捷&#xff0c;网络的发展提供了很多工作机会&#xff0c;众多的人们在不同的城市寻找着合适的工作机会&#xff0c;在此的第一步就是寻 找一个合适自…

nginx安装和负载均衡

1. nginx安装 &#xff08;1&#xff09;安装依赖项&#xff1a; yum -y install gcc gcc-c make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel&#xff08;2&#xff09;下载Nginx源代码&#xff1a; http://nginx.org/en/download.html https://nginx.o…

Sharding 分片

Sharding 分片 分片机制的概念 Sharding is a method for distributing data across multiple machines. MongoDB uses sharding to support deployments with very large data sets and high throughput operations. 分片&#xff08;Shard&#xff09; 每个分片&#xff08…

使用API管理Dynadot域名,在账户中添加域名服务器(Name Server)

前言 Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮箱&…

http账号密码认证Http Basic Auth

1.1 Http Basic Auth 这是一种最古老的安全认证方式&#xff0c;这种方式就是简单的访问API的时候&#xff0c;带上访问的username和password&#xff0c;由于信息会暴露出去&#xff0c;所以现在也越来越少用了&#xff0c;现在都用更加安全保密的认证方式&#xff0c;可能某…

代码随想录算法训练营第六十天|Day60 图论

Bellman_ford 队列优化算法&#xff08;又名SPFA&#xff09; https://www.programmercarl.com/kamacoder/0094.%E5%9F%8E%E5%B8%82%E9%97%B4%E8%B4%A7%E7%89%A9%E8%BF%90%E8%BE%93I-SPFA.html 本题我们来系统讲解 Bellman_ford 队列优化算法 &#xff0c;也叫SPFA算法&#xf…

系统性能定时监控PythonLinux

系统性能定时监控 1.系统监控概述 ⽤Python来编写脚本简化⽇常的运维⼯作是Python的⼀个重要⽤途。在Linux下&#xff0c;有许多系统命令可以让我们时刻监控系统运⾏的状态&#xff0c;如 ps &#xff0c; top &#xff0c; free 等等。要获取这些系统信息&#xff0c;Python…

软件测试面试之数据库部分

1.取第 4 到5 条记录 --按ID从小到大&#xff0c;查询第到第条数据 select top4 *from(select top5 * from qicheorder by ID asc ) as TA order by ID desc--按ID从小到大&#xff0c;查询第到第条数据 select top 2*from(select top 4 *from qicheorder by ID asc )as TA o…

2024年第十三届”认证杯“数学中国数学建模国际赛(小美赛)

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

移远通信携手紫光展锐,以“5G+算力”共绘万物智联新蓝图

11月26日&#xff0c;2024紫光展锐全球合作伙伴大会在上海举办。作为紫光展锐重要的合作伙伴&#xff0c;移远通信应邀参会。 在下午的物联网生态论坛上&#xff0c;移远通信产品总监胡勇华作题为“5G与算力双擎驱动 引领智联新未来”的演讲&#xff0c;深度剖析了产业发展的趋…

Microsoft Excel如何插入多行

1.打开要编辑的excel表&#xff0c;在指定位置&#xff0c;鼠标右键点击“插入”一行 2.按住shift键&#xff0c;鼠标的光标箭头会变化成如下图所示 3.一直按住shift键和鼠标左键&#xff0c;往下拖动&#xff0c;直至到插入足够的行

Leetcode322.零钱兑换(HOT100)

链接 代码&#xff1a; class Solution { public:int coinChange(vector<int>& coins, int amount) {vector<int> dp(amount1,amount1);//要兑换amount元硬币&#xff0c;我们就算是全选择1元的硬币&#xff0c;也不过是amount个&#xff0c;所以初始化amoun…

力扣 二叉树的层序遍历-102

二叉树的层序遍历-102 class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> res; // 二维数组用来存储每层节点if (root nullptr)return res;queue<TreeNode*> q; // 队列用来进行层序遍历q.push(r…

kafka生产者和消费者命令的使用

kafka-console-producer.sh 生产数据 # 发送信息 指定topic即可 kafka-console-producer.sh \ --bootstrap-server bigdata01:9092 \ --topic topicA # 主题# 进程 29124 ConsoleProducer kafka-console-consumer.sh 消费数据 # 消费数据 kafka-console-consumer.sh \ --boo…

跨平台应用开发框架(3)-----Qt(样式篇)

目录 1.QSS 1.基本语法 2.QSS设置方式 1.指定控件样式设置 2.全局样式设置 1.样式的层叠特性 2.样式的优先级 3.从文件加载样式表 4.使用Qt Designer编辑样式 3.选择器 1.类型选择器 2.id选择器 3.并集选择器 4.子控件选择器 5.伪类选择器 4.样式属性 1.盒模型 …

阅读《基于蒙特卡洛法的破片打击无人机易损性分析》_笔记

目录 基本信息 1 引言 1.1 主要研究内容 1.2 研究必要性&#xff08;为什么要研究&#xff09; 1.3 该领域研究现状&#xff08;别人做了什么/怎么做的&#xff09; 2 主要研究过程&#xff08;我们做了什么&#xff09; 2.1 建立目标仿真模型 2.2 确定毁伤依据 2.3 无…