R语言学习笔记——扩展篇:第十九章-使用ggplot2进行高级绘图

news2025/2/4 15:00:15

R语言

R语言学习笔记——扩展篇:第十九章-使用ggplot2进行高级绘图


文章目录

  • R语言
  • 一、R中的四种图形系统
  • 二、ggplot2包介绍
  • 三、用几何函数指定图的类型
  • 四、分组(重叠图形)
  • 五、刻面(并排图形)
  • 六、添加光滑曲线
  • 七、修改ggplot2图形的外观
    • 7.1、坐标轴
    • 7.2、图例
    • 7.3、标尺
    • 7.4、主题
    • 7.5、多重图
    • 补——颜色集
  • 八、保存图形


一、R中的四种图形系统

  • 基础图形系统:R自带
  • grid图形系统
    • grid包
    • 特点
      • 用户在图像设备上随意创建矩形区域并定义坐标系统,然后使用绘图基础单元来控制图形元素的摆放与外观。
      • 对图形的灵活性很高,适用于软件开发者,但不提供生成统计图形以及完整绘图的函数,不适合数据分析师
  • lattice图形系统
    • lattice包
    • 特点
      • 绘制网格图形,其显示一个变量的分布或者变量之间的关系,分别显示一个或多个变量的各个水平。
      • 基于grid包创建,处理多元数据的可视化功能很强。(一般为绘图的备选方案)
  • ggplot2图形系统
    • ggplot2包
    • 特点
      • 最常用的图形系统
      • 一种全面的,基于语法的,连贯一致的图形生成系统。

二、ggplot2包介绍

  • 语法:每一个函数修改属于自己的部分,函数与函数之间用(+)号函数串联
  • 示例
library(ggplot2)
ggplot(data = mtcars,aes(x=wt,y=mpg)) + 
  # 指定数据集(mtcars)与变量(wt,mpg),aes()函数(aesthetic,美观)指定每个变量的角色
  # mtcars数据集,包含32辆汽车的详细信息
  geom_point(pch=17,color="blue",size=2)+
  # ggplot()函数没有自己的图形输出。使用几何函数(geom)添加几何对象
  # geom_point()函数绘制散点图,使用2倍大小的蓝色三角符号(pch=17)
  geom_smooth(method ="lm",color="red",linetype=2)+
  # geom_smooth()函数绘制平滑曲线,绘制一条线性拟合(method ="lm")的红色虚线(linetype=2)
  labs(title = "Automobile Data",x = "Weight",y = "Miles per Gallon")
  # labs()函数(可选),添加注释

在这里插入图片描述

  • 分组与小面化
    • 分组:在一个图形中显示两组或多组观测结果
    • 小面化:在单独,并列的图形上显示观察组
    • ggplot2包在定义组或面时使用因子
  • 示例
library(ggplot2)
mtcars$am <- factor(mtcars$am,levels = c(0,1),labels = c("Automatic","Manual"))
# 变速箱类型(自动与手动)
mtcars$vs <- factor(mtcars$vs,levels = c(0,1),labels = c("V-Engine","StraightEngine"))
# 发动机装置(V型与直列式发动机)
mtcars$cyl <- factor(mtcars$cyl)
# am与vs是刻面变量,cyl是分组变量
ggplot(data = mtcars,aes(x = hp,y = mpg,shape = cyl,color = cyl)) +
  geom_point(size = 3) +
  facet_grid(am~vs) +
  labs(title = "Automobile Data by Engine Type",x = "Horsepower",y = "Miles per Gallon")

在这里插入图片描述

三、用几何函数指定图的类型

  • 步骤:最基础的绘图步骤
    • :ggplot()函数指定要绘制的数据源和变量,ggplot(data = ,aes(x=,y=))
    • :调用几何函数geom函数在视觉上表现变量,目前有37个gemo函数
  • 常用几何函数
函数功能参数
geom_bar()条形图color、fill、alpha
geom_boxplot()箱线图color、fill、alpha、notch、width
geom_density()密度图color、fill、alpha、linetype
geom_histogram()直方图color、fill、alpha、linetype、binwidth
geom_hline()水平线color、alpha、linetype、size
geom_jitter()抖动点color、size、alpha、shape
geom_line()线图colorvalpha、linetype、size
geom_point()散点图color、size、alpha、shape
geom_rug()地毯图color、side
geom_smooth()拟合曲线图color、fill、method、linetype、formula、size
geom_text()文字注解详见help
geom_violin()小提琴图color、fill、alpha、linetype
geom_vline()垂线color、size、alpha、linetype
  • 参数详解
参数功能
color对点,线,填充区域的边界着色
fill对填充区域着色,如条线和密度区域
alpha颜透明度,0(透明)-1(不透明)
linetype图案的线条,同lty(1=实线,2=虚线,3=点,4点破折号,5=长破折号,6=双破折号)
size点的尺寸,线的宽度
shape点的形状,同pch
position绘制诸如条形图和点等对象的位置。对条形图"dodge"将分组条形图并排,"stacked"堆叠分组条形图,"fill"垂直的堆叠分组条形图并且高度相同。对点,"jitter"将点散开分布,减少重叠
binwidth直方图宽度
notch方块图是否应有缺口(T/F),若两个箱的缺口互不重叠,则表明它们的中位数有显著的差异
sides地毯图的安置(“b”=底部,“l”=左部,“t”=顶部,“r”=右部,“bl”=左下部,等等)
width箱线图的宽度

在这里插入图片描述在这里插入图片描述

  • 示例1
# car包的Salaries数据集,包含了大学教授的收入信息。
install.packages("car")
library(car)
ggplot(Salaries,aes(x=rank,y=salary)) +
  geom_boxplot(fill="#00DDAA",color = "black", notch = T) +
  geom_point(position = "jitter",color = "blue",alpha =.5) +
  geom_rug(sides = "l",color = "black")
  # 地毯图表示薪水的一般扩散

在这里插入图片描述

  • 示例2
library(lattice)
ggplot(singer,aes(x = voice.part,y = height)) +
  geom_violin(fill = "lightblue") +
  geom_boxplot(fill = "lightgreen",width = .2)

在这里插入图片描述

四、分组(重叠图形)

  • 情形:在一个图中画出两个或多组图的观察值
  • 数据类型因子
  • 函数aes()
    • 变量赋给color,fill,shape,linetype等元素,进行分组
  • 示例1:以学术等级分组的大学薪酬,红——助理教授,绿——副教授,蓝——教授
# car包的Salaries数据集中的变量,rank(助理教授,副教授,教授),sex(男性,女性)
# yrs.service(工龄),salary(九个月薪水(美元)),yrs.since.phd(获得博士学位年份)
library(car)
# 以学术等级分组的大学薪酬,红——助理教授,绿——副教授,蓝——教授
ggplot(Salaries,aes(x=salary,fill=rank)) +
  geom_density(alpha =.5)

在这里插入图片描述

  • 示例2:博士毕业年数和薪水的散点图,红——助理教授,绿——副教授,蓝——教授
# 博士毕业年数和薪水的散点图,红——助理教授,绿——副教授,蓝——教授
ggplot(Salaries,aes(x=yrs.since.phd,y=salary,color=rank,shape=sex)) +
  geom_point()

在这里插入图片描述

  • 示例3:按学术等级和性别划分的教授数量
# 按学术等级和性别划分的教授数量
a <- ggplot(Salaries,aes(x=rank,fill=sex)) +
  geom_bar(position="stack") +
  labs(title='position="stack"')

b <- ggplot(Salaries,aes(x=rank,fill=sex)) +
  geom_bar(position="dodge") +
  labs(title='position="dodge"')

c <- ggplot(Salaries,aes(x=rank,fill=sex)) +
  geom_bar(position="fill") +
  labs(title='position="fill"',y="%")

library(gridExtra)
grid.arrange(a,b,c,ncol=3)

在这里插入图片描述

五、刻面(并排图形)

  • 概念:分组时为了让图形重叠,刻面是为了让图形并排出现。
  • 数据类型因子
  • 函数facet_wrap()函数和facet_grid()函数
  • 语法与参数
语法功能
facet_wrap(~var,ncol=n)将每个var水平排列成n列的独立图
facet_wrap(~var,nrow=n)将每个var水平排列成n行的独立图
facet_grid(rowvar~colvar)rowvar和colvar组合的独立图,对应为行~列
facet_grid(rowvar~.)每个rowvar水平的独立图,配置成一个单列
facet_grid(.~colvar)每个colvar水平的独立图,配置成一个单行
  • 示例1:各个声部歌手的身高分布
ggplot(singer,aes(height)) +
  geom_histogram(bins = 30) +
  facet_wrap(~voice.part,nrow = 4)

在这里插入图片描述

  • 示例2:同时包含了分组和刻面
library(car)
ggplot(Salaries,aes(x=yrs.since.phd,y=salary,color=rank,shape=rank)) +
  geom_point() +
  facet_grid(.~sex)

在这里插入图片描述

  • 示例3:展示每个声部成员的身高分布,并利用核密度图水平排列,给每个声部分配不同的颜色。
ggplot(singer,aes(x=height,fill=voice.part)) +
  geom_density() +
  facet_grid(voice.part~.)

在这里插入图片描述

六、添加光滑曲线

  • 概念:添加光滑曲线(线性,非线性,非参数)和置信空间到散点图
  • 图形对象散点图
  • 函数geom_smooth()函数(其依赖于stat_smooth()函数
  • 语法与参数
语法功能
method绘制方法。lm=线性,glm=广义线性,smooth=loess(非参数,默认),rlm=健壮线性,gam=广义相加
formula公式。如yx(默认),y=poly(x,n)表示n次多项式拟合,yns(x,n)表示一个具有n给自由度的样条拟合
se绘制置信区间(T/F),默认为T
level置信空间水平(默认95%)
fullrange指定拟合应涵盖全图(T)或仅仅是数据(F,默认)
  • 示例
# 探究博士毕业年数与薪水的关系
ggplot(Salaries,aes(x=yrs.since.phd,y=salary,linetype=sex,shape=sex,color=sex))  +
    geom_smooth(method = lm,formula = y~poly(x,2),se=F,size=1) +
    geom_point(size=2)
# 对男性而言,曲线从0-30年增加后下降。对女性,拟合曲线从0-40年一直上涨。
# 对数据集中的大部分范围,男性能拿到更高的薪水

在这里插入图片描述

七、修改ggplot2图形的外观

  • 在绘制基础图形时,可以利用par( )等函数来修改图形(第三章)
  • 这些方法对ggplot2图形没有影响,ggplot2提供了特定的函数来改变其预先外观

7.1、坐标轴

  • 概念:自定义坐标轴,包括刻度线,刻度标记标签和坐标轴标签
  • 函数
    • ggplot2的函数区分x/y轴,以及轴线是否代表一个连续或者离散变量(因子)
函数功能与参数
labs()添加标题,改变坐标轴
scale_x_continuous()和scale_y_continuous()breaks指定刻度标记,labels指定刻度标记标签,limits控制要展示的值的范围
scale_x_discrete()和scale_y_discrete()breaks对因子的水平进行放置与排序,labels指定这些水平的标签,limits表示哪些水平应该展示
coord_flip()颠倒x/y轴
  • 示例
# 收入与学术排名成正比,同等级中男性比女性薪酬水平高
library(ggplot2)
ggplot(Salaries,aes(x=rank,y=salary,fill=sex)) +
  geom_boxplot() +
  scale_x_discrete(breaks = c("AsstProf","AssocProf","Prof"),
                   labels = c("Assistant\nProfessor","Associate\nProfessor","Full\nProfessor")) +
  # \n 换行符
  scale_y_continuous(breaks = c(50000,100000,150000,200000),
                     labels = c("$50K","$100K","$150K","$200K")) +
  labs(title = "Faculty Salary by Rank and Sex")

在这里插入图片描述

7.2、图例

  • 概念:指出如何利用颜色,形状,尺寸等视觉特效来表示数据特征的指南
  • 图例标题
    • 步骤一:判断图例时基于颜色,形状,尺寸等具体内容(具体见**aes()**函数中的内容)进行区分的
    • 步骤二:将fill=“mytitle”(假设以fill进行区分)添加到**labs()**函数中
  • 图例位置
    • 函数theme()函数中的legend.position参数选项
      • 参数值:left,top,right(默认),bottom,none(删除)或向量参数指定位置c(x,y)其中x,y(0-1),表示距离左侧边缘x底部边缘y
  • 示例
library(ggplot2)
ggplot(Salaries,aes(x=rank,y=salary,fill=sex)) +
  geom_boxplot() +
  scale_x_discrete(breaks = c("AsstProf","AssocProf","Prof"),
                   labels = c("Assistant\nProfessor","Associate\nProfessor","Full\nProfessor")) +
  # \n 换行符
  scale_y_continuous(breaks = c(50000,100000,150000,200000),
                     labels = c("$50K","$100K","$150K","$200K")) +
  labs(title = "Faculty Salary by Rank and Sex",fill="Gender") +
  theme(legend.position = c(.1,.8))
  # 表示距离左侧边缘10%底部边缘80%

在这里插入图片描述

7.3、标尺

  • 概念:包数据空间的观察值(连续或离散变量)映射到可视化空间中

  • 示例1:连续型标尺映射数值型变量到图中

ggplot(mtcars,aes(wt,mpg,size=disp)) +
  geom_point(shape=21,color="black",fill="cornsilk") +
  labs(x="weight",y="Miles per Gallon",
       title = "Bubble Chart",size="Engine\nDisplacement")

在这里插入图片描述

  • 示例2:离散型标尺将带有因子水平的视觉线索(如颜色,形状,尺寸,线条类型和透明度)关联起来
    • 函数scale_color_manual(values)
      • 指定颜色
    • 函数scale_color_brewer(palette =" name")
      • 使用预先设定好的颜色集
    • 函数display.brewer.all()
      • 展示所有的内置颜色集,既name
ggplot(Salaries,aes(x=yrs.since.phd,y=salary,color=rank)) +
         scale_color_manual(values=c("orange","olivedrab","navy")) +
         geom_point(size=2)
         
ggplot(Salaries,aes(x=yrs.since.phd,y=salary,color=rank)) +
  scale_color_brewer(palette ="Set1") +
  geom_point(size=2)

在这里插入图片描述在这里插入图片描述

7.4、主题

  • 概念:控制图片的整体外观,如调节字体,背景,颜色和网格线等。
    • 主题可以保存起来运用到多个图形中
  • 函数theme()
  • 示例
mytheme <- theme(
  plot.title = element_text(face = "bold.italic",size = 14,color = "brown"),
  # 标题为斜粗体棕色14号
  axis.title = element_text(face = "bold.italic",size = 10,color = "brown"),
  # 轴标题为斜粗体棕色10号
  axis.text = element_text(face = "bold",size = 9,color = "darkblue"),
  # 坐标轴标签为粗体深蓝色9号
  panel.background = element_rect(fill = "white",color = "darkblue"),
  # 白色背景填充加深蓝色边框
  panel.grid.major.y = element_line(color = "grey",linetype = 1),
  # 主水平网格y轴(水平线)为灰色实线
  panel.grid.minor.y = element_line(color = "grey",linetype = 2),
  # 次水平网格y轴(水平线)为灰色虚线
  panel.grid.minor.x = element_blank(),
  # 垂直线不输出
  legend.position = "top"
  # 图例在顶部
)
ggplot(Salaries,aes(x=rank,y=salary,fill=sex)) +
  geom_boxplot() +
  labs(title = "Salary by Rank and Sex",x="Rank",y="Salary") +
  mytheme

在这里插入图片描述

7.5、多重图

  • 概念:将多个单独的图片放在单个图形中
  • 函数gridExtra包中的grid.arrange()函数
  • 语法
grid.arrange(figure1,figure2...,nrow=n,ncol=m, newpage = TRUE)
# n行m列,按行排列图片
  • 示例
  a <- ggplot(Salaries,aes(x=rank,fill=sex)) +
    geom_bar(position="stack") +
    labs(title='position="stack"')
  
  b <- ggplot(Salaries,aes(x=rank,fill=sex)) +
    geom_bar(position="dodge") +
    labs(title='position="dodge"')
  
  c <- ggplot(Salaries,aes(x=rank,fill=sex)) +
    geom_bar(position="fill") +
    labs(title='position="fill"',y="%")
  
  d <- ggplot(Salaries,aes(x=yrs.since.phd,y=salary,linetype=sex,shape=sex,color=sex))  +
    geom_smooth(method = lm,formula = y~poly(x,2),se=F,size=1) +
    geom_point(size=2)
  
  install.packages("gridExtra")
  library(gridExtra)
  grid.arrange(a,b,c,d,nrow=2,ncol=2)

在这里插入图片描述

补——颜色集

  • 功能:生成调色板,既一串颜色的集合。
  • 函数brewer.pal(),display.brewer.all()
  • 语法
brewer.pal(3-x,name)
# 3-x表示颜色数量,3是最小值。x根据颜色集name中数量而定,name为内置颜色集
display.brewer.all()
# 展示所有的内置颜色集,既name
  • 功能:扩展颜色集。当颜色集里面的颜色不够时,将其进一步划分。
  • 函数:== colorRampPalette()==
  • 语法
colorRampPalette(colors = c())(n) 
# 将colors转化为n种颜色
  • 功能:反转数据。
  • 函数rev()
  • 语法
rev()
# 函数用于返回数据对象的反向版本,为了美观可以将颜色反转
  • 示例
colors <- colorRampPalette( rev(brewer.pal(9, "Blues")) )(255)
library(RColorBrewer)       
display.brewer.all()

在这里插入图片描述

八、保存图形

  • 函数ggsave()
  • 语法
ggsave(
  filename,
  plot = last_plot(),
  device = NULL,
  path = NULL,
  scale = 1,
  width = NA,
  height = NA,
  units = c("in", "cm", "mm", "px"),
  dpi = 300,
  limitsize = TRUE,
  bg = NULL,
  ...
)
  • 示例
# lattice包中的singers数据集,包含了纽约合唱歌手的高度和语音变量
library(lattice)
myplot <- ggplot(singer,aes(x = voice.part,y = height)) +
  geom_violin(fill = "lightblue") +
  geom_boxplot(fill = "lightgreen",width = .2)

ggsave(filename = "singers2.png",plot = myplot,width = 5,height = 4,dpi = 5000,path = "C:/Users/16748/Desktop")
# 如果不加plot选项,会保存最近的那张图片
# 不加path选项,会保存在当前路径
# 文件扩展名可以为png,ps,txt,jpeg,pd,tff,bmp,svg或wmf(限Windows系统)

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

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

相关文章

SpringMVC的AOP总结

SpringMVC的AOP总结 1、Filter 过滤器 Filter是Servlet规范中规定的&#xff0c;只能用于WEB中, 在Servlet前后起作用 它可以对几乎所有请求进行过滤&#xff0c;但是缺点是一个过滤器实例只能在容器初始化时调用一次 使用场景: 修改字符编码; 对入参进行校验, 校验不通过返回…

java实验报告之Employee类的设计

一个不知名大学生&#xff0c;江湖人称菜狗 original author: jacky Li Email : 3435673055qq.com Time of completion&#xff1a;2022.12.20 Last edited: 2022.12.20 目录 一、实验目的 二、实验内容 三、总体设计&#xff08;设计原理、设计方案及流程等&#xff09; 四…

Python数据结构+算法全面讲解:定义函数、定义类

之前的过程抽象例子调用了 Python数学模块中的 sqrt 函数来计算平方根。通常来说,可以 通过定义函数来隐藏任何计算的细节。函数的定义需要一个函数名、一系列参数以及一个函数体。 函数也可以显式地返回一个值。例如,下面定义的简单函数会返回传入值的平方。 >>> …

使用 Appium 报错“... Could not find ‘adb‘ in ...”

使用 Appium 报错 “... Could not find adb in ...”1. 现象2. 问题定位3. 解决方案4. 验证1. 现象 在 Robot Framework 中使用 Open Application 关键字以通过 Appium 来打开模拟器上的应用报错&#xff1a; WebDriverException: Message: An unknown server-side error occ…

Transformer17

还是transformer 这次还是谷歌哈 又在机器人领域发力 谷歌机器人团队等在机器人领域构建了一个多任务 transformer 模型&#xff0c;显著改进了对新任务、环境和对象的零样本泛化。轻松完成700多条指令、成功率达97%&#xff01;谷歌开源机器人领域 我们知道&#xff0c;机器…

Docker搭建MySQL主从集群

使用Docker搭建一主一从的MySQL集群&#xff0c;使用的是8版本的MySQL镜像不是8的版本部分命令会无效&#xff0c;宿主机任意 规划 端口角色3307master3308slave 思路 事先准备 要确保linux宿主机已经安装上Docker。然后将MySQL镜像下载到本地 &#xff0c;可以先去Docker Hu…

ssm java mysql_医院门诊管理系统_

息化不断建设发展的今天&#xff0c;医院看病预约&#xff0c;医生的挂号等&#xff0c;已经十分方便&#xff0c;通过在线挂号&#xff0c;医生的查看&#xff0c;就能够了解到医院的门诊基本信息&#xff0c;并且可以在线进行门诊的医生查看&#xff0c;医院最新的资讯等&…

Golang 【basic_leaming】切片

阅读目录1、为什么要使用切片2、切片的定义3、关于nil 的认识4、切片的循环遍历5、基于数组定义切片6、切片再切片7、关于切片的长度和容量8、切片的本质9、使用 make() 函数构造切片10、切片不能直接比较11、切片是引用数据类型 -- 注意切片的赋值拷贝12、append() 方法为切片…

Mycat(10):分片详解之固定分片hash算法

1 找到conf/schema.xml并备份 2 固定分片hash算法 本条规则类似于十进制的求模运算&#xff0c;区别在于是二进制的操作,是取id的二进制低10位&#xff0c;即id二进制 。 此算法的优点在于如果按照 10进制取模运算&#xff0c;在连续插入1-10 时候1-10会被分到1-10个分片&…

手机号格式检查系统(Java)

本系统支持的手机号检查如下所示&#xff1a; /** * 中国移动&#xff0c;中国联通&#xff0c;中国电信都为11位的手机号 * 中国"移动"前三位: * 135、136、137、138、139、147、150、151、152、157、 * 158、159、172、178、182、183、184、187、188、195、197、19…

铝网初效过滤器及金属网过滤器的区别

广州特耐苏净化设备有限公司详细介绍&#xff1a;粗效过滤器主要技术参数 什么叫铝网初效过滤器及金属网过滤器?铝网初效过滤器也叫金属网过滤器也可叫GH金属孔网过滤器只是人们的叫法不同。 铝网初效过滤器均具安全&#xff0c;坚固&#xff0c;耐高温,耐酸碱,之特性.一般应…

WebDAV之葫芦儿•派盘+Obsidian笔记

Obsidian 支持WebDAV方式连接葫芦儿派盘。 还在为大量的日记、笔记管理而烦恼?推荐一款可以作为第二大脑、支持双向链接、基于Markdown文件的本地知识管理软件。 Obsidian是一款全设备端的笔记软件,让用户能够非常方便的进行笔记上面的记录,纸张无限边界,想到哪,写到哪,不…

点成分享 | 蛋白质浓度测定之BCA法

蛋白质浓度的测定是常见的生物实验之一。本文介绍的是使用BCA法&#xff08;二辛可酸法或二喹啉甲酸法&#xff09;进行蛋白质浓度的测定。 BCA分子式 1 实验原理 BCA是一种稳定的碱性水溶性复合物。在碱性条件下&#xff0c;蛋白质可以将BCA试剂中的二价铜离子Cu2还原成一价…

C++类和对象(上)

学习“类”不“类”&#xff0c;有“对象”了吗&#xff1f; 目录 面向过程和面向对象 类的引入 类的定义 访问限定符 封装 类的作用域 类的实例化 类对象的存储方式 计算类对象的大小 this指针 this指针的特性 this指针两问 面向过程和面向对象 ●C语言是面向过程的…

【Javassist】快速入门系列03 使用Javassist实现方法异常处理

系列文章目录 01 在方法体的开头或结尾插入代码 02 使用Javassist实现方法执行时间统计 03 使用Javassist实现方法异常处理 文章目录系列文章目录前言引入Javassist jar包使用Javassist实现方法异常处理总结说明前言 上一章我们介绍了使用使用Javassist实现了对方法执行时间的…

07_哈希表

哈希表 1.为什么需要构建哈希表 现在有一组数据&#xff0c;我们想查找一个值&#xff08;x&#xff09;是否在这组数据中&#xff0c;通常来说&#xff0c;我们需要把这组数据遍历一遍&#xff0c;来看看有没有x这个值。 这时&#xff0c;我们发现这样查找数据要花费的时间…

C++ 类和对象

C认为万事万物都皆为对象&#xff0c;对象上有其属性和行为&#xff0c;C面向对象的三大特性为&#xff1a;封装、继承、多态。 一. 封装 封装是C面向对象三大特性之一。 封装的意义&#xff1a; 将属性和行为作为一个整体&#xff0c;表现生活中的事物将属性和行为加以权限控…

【数据库】时间戳并发控制

Timestamp ordering(T/O) 根据事务的时间戳来决定顺序。 如果T1 的时间戳小于T2 的时间戳&#xff0c;那么执行的结果要等价于T1 执行早于T2 的执行。 时间戳的实现策略&#xff1a; 系统时钟 逻辑计数 混合方法 Basic Timestamp Ordering&#xff08;T/O&#xff09;Prtot…

【WPF绑定2】 ComboBox MVVM SelectedValue复杂数据类型绑定

前言 这次绑定是一次非常痛苦的经历&#xff0c;因为SelectedValue总是不能生效&#xff01;我一度怀疑是wpf的Bug。其实还是自己没搞清楚。 在之前的一篇文章中&#xff1a; http://t.csdn.cn/A4W6Ahttp://t.csdn.cn/A4W6A我也写个ComboBox的绑定&#xff0c;但是当时没有指…

【实时数仓】DWM层订单宽表之实现基本的维度查询、加入旁路缓存模式

文章目录一 DWM层-订单宽表1 维表关联代码实现&#xff08;1&#xff09;首先实现基本的维度查询功能a 封装Phoenix查询的工具类PhoenixUtilb 封装查询维度的工具类DimUtil&#xff08;2&#xff09; 优化1&#xff1a;加入旁路缓存模式a 缓存策略的几个注意点b 缓存的选型c 在…