R语言绘图

画图例子

R Graph Cookbook例子

 

今天突然找到一本专门教授R语言绘图的书,R Graph Cookbook,发现还不错。当初喜欢上R语言就是因为它绘图特别好看。下面把这本书的内容,经过我学习后,翻译并贴上了吧。(我水平还不够,原创还不行呀,不过学习就是先模仿再创新的过程)之所以要贴到博客上来,我是怕有一天我也忘记了,好直接到我博客上来搜索一下,同时也方便了别人。

下面说的是用R语言绘制散点图。其实绘制散点图,用plot(x,y)直接就可以了,不过这样绘制出来的散点图太简单了,不能达到使用的要求,所以要详细得设置一些参数,才能让图形更加的漂亮。

 

还是直接上代码吧,我已经做好注释的了。

plot(cars$dist~cars$speed,#y~x,cars是R自带的数据
main="Relationship between car distance & speed",#标题
xlab = "Speed(miles per hour)",#x轴标题
ylab = "Distance travelled (miles)",#Y轴标题
xlim = c(0,30),#设置x轴的取值区间为0到30
ylim = c(0,140),#设置y轴的取值区间为0到140
xaxs = "i",#这里是设置x轴的风格,暂时没看明白有多大区别
yaxs = "i",
col = "red",#设置颜色
pch = 19)#pch指代点的形状,用数字表示,可查看帮助文档
#如果要保存图片怎么办呢?我觉得最简单的方法就是使用RStudio这个IDE,极其得好,可惜很多人都不知道。#如果你不会,可以用如下代码实现:#(图形的参数还有很多个,我这里只使用了其中的几个)
png(filename="散点图.png",width=480,height=480)
plot(cars$dist~cars$speed,#y~x
main="Relationship between car distance & speed",#标题
xlab = "Speed(miles per hour)",#x轴标题
ylab = "Distance travelled (miles)",#Y轴标题
xlim = c(0,30),#设置x轴的取值区间为0到30
ylim = c(0,140),#设置y轴的取值区间为0到140
xaxs = "i",#这里是设置x轴的风格,暂时没看明白有多大区别
yaxs = "i",
col = "red",
pch = 19)#pch指代点的形状,用数字表示,可查看帮助文档
dev.off()

 

 
如果你还有另一组数据,需要在上面这幅图里绘制,也就是在同一幅图里面绘制两组数据的散点图,可以像下面这样用point函数:
png(filename="散点图.png",width=480,height=480)
plot(cars$dist~cars$speed,#y~x
main="Relationship between car distance & speed",#标题
xlab = "Speed(miles per hour)",#x轴标题
ylab = "Distance travelled (miles)",#Y轴标题
xlim = c(0,30),#设置x轴的取值区间为0到30
ylim = c(0,140),#设置y轴的取值区间为0到140
xaxs = "i",#这里是设置x轴的风格,暂时没看明白有多大区别
yaxs = "i",
col = "red",
pch = 3)#pch指代点的形状,用数字表示,可查看帮助文档
points(cars$speed~cars$dist,pch=19)#因为比较难弄数据,就把原先的数据因果关系颠倒一下,pch设置与前面不同以区分
dev.off()

如果自己没有数据的话,可以用data()查看R语言内置的数据的哦。还是有挺多数据的。

上面的这些是散点图,但是你只要在参数里面type="l"#是字母l,那么就会将这些点串联起来画成线了。

下面是条形图的绘制方法(bar plot),数据是该书自带的,代码如下:

png(filename="散点图.png",width=480,height=480)
Sales <- read.csv("/home/rickey/文档/电子书/R教程/Learn R statistics/R Graph/Code/Chapter 1/Data Files/citysales.csv",header=TRUE)#header设置为TRUE表示把数据行和列的名称也读取进来
barplot(Sales$ProductA,
names.arg=Sales$City,
col="blue")
dev.off()

 

图形输出(pdf\Win\PBG\JPEG\BMP\PostScript)

用代码保存图形,将绘图语句夹在开启目标图形设备的语句和关闭目标图形设备的语句之间即可。

#pdf("mygraph.pdf")#pdf文件
win.metafile("filename.wmf")#windows图形文件
#png("filename.png")#PBG文件
#jpeg("filename.jpg")#JPEG文件
#bmp("filename.bmp")#BMP文件
#postscript("filename.ps")#PostScript文件
attach(mtcars)
plot(wt,mpg)
abline(lm(mpg~wt))
title("Regression of MPG on Weight")
detach(mtcars)
dev.off()


 




 图形初阶

使用图形

dose=c(20,30,40,45,60)
drugA=c(16,20,27,40,60)
drugB=c(15,18,25,31,40)
plot(dose,drugA,type="b")
 
 
type="b" 同时画出点和线
type=“c" 没有点只有线
 

5.图形参数

在上例中,我们想使用实心三角而不是空心圆圈作为点符号的话,病想用虚线代替实现连接这些点:
 
dose=c(20,30,40,45,60)
drugA=c(16,20,27,40,60)
drugB=c(15,18,25,31,40)
plot(dose,drugA,type="b")
opar = par(no.readonly=TRUE) #复制一份单签的图形参数
par(lty=2,pch=17) #将默认的线性类型修改为虚线(lty=2)并且将默认的点符号改为了实心三角(pch=17)
#也可以使用par(lty=2);par(pch=17)两句
plot(dose,drugA,type="b")#绘制了图形
par(opar)#还原了原始设置
#或者这样写plot(dose,drugA,type="b",lty=2,pch=17)来画图,但只是针对于这张图

 

 

 


pch :指定绘制点时使用的符号

cex:指定符号的大小。cex是一个数值,表示绘图符号相对于默认值大小的缩放倍数。默认大小为1,1.5表示放大为默认值的1.5倍.

lty:指定线条类型

lwd:指定线条宽度。(默认值的几倍)

col:默认的绘图颜色。如这是col=c("red","blue")并需要绘制三条线,第一条为红色,第二条为蓝色,第三条为红色

col.axis 坐标轴颜色

col.main 标题颜色

col.sub 副标题的颜色

fg 前景色

bg 背景色

example: col=1,col="white" col="#FFFFFF" col=rgb(1,1,1) col=hsv(0,1,1) 都可以表示白色

R中也用多种用于创建连续型颜色向量的函数:

 rainbow()

heat.colors()

terrain.colors()

top.colors()

cm.colors()

gray()可以生成多节灰度

n=10
mycolors=rainbow(n)
pie(rep(1,n),labels=mycolors,col=mycolors)
mygrays=gray(0:n/n)
 pie(rep(1,n),labels=mygrays,col=mygrays)


6.文本属性

cex:表示相对默认大小缩放倍数的数值。(倍数)

cex.axis:坐标轴刻度文字的缩放倍数。

cex.lab:坐标轴标签(名称)的缩放倍数。

cex.main:标题的缩放倍数

cex.sub:副标题的缩放倍数

 

font: 整数类型。1=常规,2=粗体,3=斜体,4=粗斜体,5=符号字体(adobe编码)

font.axis font.lab font.main font.sub

ps 磅值文本最终的大小为ps*cex

family 绘制文本是使用的字体族。 标准取值为serif(衬线)、sans(无衬线)和mono(等宽)

Windows中,可以通过函数windowsFont()创造新的映射。(Mac,采用quartzFont())

 

PDF或者PostScript输出格式图形,修改相对简单。

PDF使用names(pdfFonts())找出系统有哪些字体可用,然后用pdf(file=”myplot.pdf“,family="fontname")生成图形。

PostScript输出格式的图形,可以使用names(postscriptFonts())和postscript(file="myplot.ps",family="fontname")

 

7.图形尺寸和边界尺寸

 pin:以英寸表示的图形尺寸(宽和高)

mai:以数值向量表示的边界大小,顺序为“下、左、上、右”单位为英寸

mar:以数值向量表示的边界大小,顺序为“下、左、上、右”单位为英分。默认=c(5,4,4,2)+0.1

8.添加文本、自定义坐标和图例

dose=c(20,30,40,45,60)
drugA=c(16,20,27,40,60)
drugB=c(15,18,25,31,40)
plot(dose,drugA,type="b",col="red",lty=2,pch=2,lwd=2,main="Clinical Trails for Drug A",sub="This is hypothetical data",xlab="Dosage",ylab="Drug Respponse",xlim=c(0,60),ylim=c(0,70))


 

 

某些高级绘图函数已经包含了默认的标题和标签。可以通过plot()语句货单独的par()语句中添加ann=FALSE来移除他们

 

标题

可以使用title()函数为图形添加标题和坐标轴标签。

坐标轴

side:一个整数,表示图形的那边会画坐标(1,2,3,4对应下、左、上、右)

at: 一个数值型向量,表示需要绘制刻度线的位置

labels:一个字符型向量,表示至于刻度线旁边的文字表全(如果是NULL,直接使用at中的值)

pos:坐标轴线位置的坐标

lty:线条类型

col:线条的刻度线颜色

las:标签是否平行于(=0)或垂直于(=2)坐标轴

tck:刻度线的长度,以向对于绘图区域大小的分数表示(负数表示在图形外侧,整数表示在图形内侧

Hmisc包中的minor.tick()函数 用来创建次要刻度线。

tick.ratio表示次要刻度线相对于主刻度线的大小比例。当前主刻度线长度可以用par("tck")获取。

参考线

函数abline()可以用来为图形添加参考线。abline(h=yvalues,v=xvalues)

example:abline(v=seq(1,10,2),lty=2,col="blue")

图例

用legend(location,title,legend,..)添加图例

location:可以直接给定xy值;location(1)通过鼠标单击给出图例的位置;关键字:bottom、bottomleft、left、topleft、topright、right、bottomright、center,同时使用参数inset=指定图形想图形内侧移动的大小(以绘图大小的分数表示)

title:图例标题的字符串(选)

legend:图例标签组成的字符型向量

 

 

文本标注

text(location,“”,pos...)

mtext(“”,side,line=n...)

location:可以直接给定xy值;location(1)通过鼠标单击给出图例的位置

pose:整数,文本相对位置的方向参数。如果指定参数offset=,,作为偏移量,以相对于单个字符宽度的比例表示

side:整数,指定用来放置文本的边。

par()增大字号

plotmath()数学标注

 

attach(mtcars)
plot(wt,mpg,main="Mileage vs Car Weight",xlab="Weight",ylab="Mileage",pch=18,col="blue")
text(wt,mpg,row.names(mtcars),cex=0.6,pos=4,col="red")
detach(mtcars)


 

 

 

opar=par(no.readonly=TRUE)
par(cex=1.5)
plot(1:7,1:7,type="n")
text(3,3,"Example of default text")
text(4,4,family="mono","Example of mono-spaced text")
text(5.5,family="serif","Example of serif text")
par(opar)


图形有问题

 

 

 

图形组合

在R中使用函数par()或layout()可以容易地组合多幅图形为一幅图形。par()函数中使用图形参数mfrow=c(nrows,ncols)来穿件按行填充的、行数为nrows、列数为ncols的图形矩阵。另外,可以使用nfcols=c(nrows,ncols)按列填充矩阵。

attach(mtcars)
opar=par(no.readonly=TRUE)
par(mfrow=c(3,1))
hist(wt)
hist(mpg)
hist(disp)
par(opar)
detach(mtcars)


 

attach(mtcars)
opar= par(no.readonly=TRUE)
par(mfrow=c(2,2))
plot(wt,mpg,main="Scatterplot of wt vs. mpg")
plot(wt,disp,main="Scatterplot of wt vs. disp")
hist(wt,main="Boxplot of wt")
boxplot(wt,main="Boxplot of wt")
par(opar)
detach(mtcars)


 

 

函数layout()的调用形势为layout(mat),其中的mat是一个矩阵,它指定了所要组合的多个图形所在位置。

attach(mtcars)
layout(matrix(c(1,1,2,3),2,2,byrow=TRUE))
hist(wt)
hist(mpg)
hist(disp)
detach(mtcar)


 

 下面代码,将一幅图形放在第一行,两幅图放在第二行,但第一行高度是第二行中图形高度的三分之一,并且,右下角图形宽度是左下角图形宽度的四分之一。

attach(mtcars)
layout(matrix(c(1,1,2,3),2,2,byrow=TRUE),widths=c(3,1),heights=c(1,2))
hist(wt)
hist(mpg)
hist(disp)
detach(mtcars)


 

 图形布局的精细控制

fig=完成这个任务

 

基本图形

条形图

简单的条形图

vcd包

如果要绘制的类别类型是一个Factor或者是有序性Factor,就可以使用plot()函数快速创建一幅垂直条形图。这时候不用table()函数

(这是关节炎研究,变量Improved记录了对每位接受了安慰剂或药物治疗的病人的治疗效果)

library(vcd)
counts=table(Arthritis$Improved)
counts
 barplot(counts,main="Simple Bar Plot",xlab="Improvement",ylab="Frequency")
barplot(counts,main="Horizontal Bar Plot",xlab="Frequency",ylab="Improvement",horiz=TRUE)

堆砌条形图和分组条形图

如果height是一个矩阵而不是一个向量,则绘制结果将是一副堆砌条形图或分组挑衅图。besides=false(默认)->堆砌图 or not 分组条形图

counts=table(Arthritis$Improved,Arthritis$Treatment)
counts
        
 #        Placebo Treated
 # None        29      13
 # Some         7       7
 # Marked       7      21
barplot(counts,main="Grouped Bar Plot",xlab="Treatment",ylab="Frequency",col=c("red","yellow","green"),legend=rownames(counts))


 barplot(counts,main="Grouped Bar Plot",xlab="Treatment",ylab="Frequency",col=c("red","yellow","green"),legend=rownames(counts),beside=TRUE)


 

均值条形图

条形图并不一定要基于计数数据或者频率数据。(均值,中位数,标准差)

states=data.frame(state.region,state.x77)
means=aggregate(states$Illiteracy,by=list(state.region),FUN=mean)
means
#        Group.1        x
#1     Northeast 1.000000
#2         South 1.737500
#3 North Central 0.700000
#4          West 1.023077
means=means[order(means$x),]
means
#       Group.1        x
#3 North Central 0.700000
#1     Northeast 1.000000
#4          West 1.023077
#2         South 1.737500
barplot(means$x,names.arg=means$Group.1)
title("Mean Illiteracy Rate")

 



中级绘图

主要关注用于展示双变量间关系(二元关系)和多变量间关系(多远关系)的绘图方法。

散点图

散点图可以用来描述两个连续变量间的关系。
首先,描述一个二元变量关系,然后探究各种通过添加而外信息来增强图形表达功能的方法。
最后,通过添加第三个连续型变量,我们将把二维图形扩展到三位,包括三维散点图和气泡图。
attach(mtcars)
plot(wt,mpg,main="Basic Scatter plot of MPG vs Weight",xlab="Car Weight(1bs/1000)",ylab="Miles Per Gallon ",pch=19)
abline(lm(mpg~wt),col="red",lwd=2,lty=1)
 lines(lowess(wt,mpg),col="blue",lwd=2,lty=2)



abline()函数用来添加最佳拟合的线性直线。lowess()函数用来添加一条平滑曲线。该平滑曲线拟合是一种基于局部加权多项式回归的非参数方法。算法来源于Cleveland(1981)

car包中的scatterplot()函数增强了散点图的需对功能,主要作用在添加拟合曲线,边界箱线图和之心椭圆,还可以按子集绘图和交互式地识别点。
> library(car)
> scatterplot(mpg~wt|cyl,data=mtcars,lwd=2,main="Scatter Plot of MPG vs. Weight by # Cylinders",xlab="Weight of Car(lbs/1000)",ylab="Miles Per Gallon",legend.plot=TRUE,id.method="identify",labels=row.names(mtcars),boxplots="xy")




1.scatterplot()函数用来描绘有4个6个8个气缸的汽车每加仑英里数对车重的图形。
2.表达式mpg~wt|cyl表示按条件绘图,按照cyl的水平分别绘制mpg和wt关系图。
3.默认条件下,各个子集通过颜色和图形符号加以区分,并同时绘制线性拟合和平滑拟合曲线。平滑拟合默认需要5个单独的数据点。
4.idmethod选项的设点表明可以通过鼠标单击方式来交互式地识别数据点。知道Stop。(在studio里面是ESC)
5.legend.plot 表明在左上边界添加土里。

散点图矩阵

R中至少有四种创建散点图矩阵的实用函数。
pairs()函数可以创建基础的散点图矩阵。 
pairs(~mpg+disp+drat+wt,data=mtcars,main="Basic Scatter Plot Matrix")


通过调整参数,可以只显示下三角或上三角的图形。
upper.panel=NULL 将众生城下三角图形。

scatterplotMatrix(~mpg+disp+drat+wt,data=mtcars,spread=FALSE,lty.smooth=2,main="Scatter Plot Matrix via car Pachage")
这里ity.smooth=2 本想设定平滑拟合曲线为虚线,但是报错lty.smooth 不是图形参数,还没有解决。但是如果lty=2,就把拟合的直线设置为虚线。


library(car)
scatterplotMatrix(~mpg+disp+drat+wt|cyl,data=mtcars,spread=FALSE,diagonal="histogram",main="Scatter Plot Matrix via car Package")

这里,我们想主对角线的和密度曲线改成了直方图(各车汽缸数为条件)
默认地,回归直线拟合整个样本,包好by.groups=TRUE。




gclus包中的cpairs()函数提供了其变种。它可以重排矩阵中变量位置的选项,可以让相关性更好的变量更靠近对角线。该函数还能对各个单元格进行颜色编码来展示变量间的相关性大小。
cor(mtcars[c("mpg","wt","disp","drat")])
            mpg               wt                      disp               drat
mpg   1.0000000    -0.8676594    -0.8475514     0.6811719
wt   -0.8676594     1.0000000      0.8879799     -0.7124406
disp -0.8475514     0.8879799     1.0000000     -0.7102139
drat  0.6811719    -0.7124406     -0.7102139     1.0000000
dmat.color() order.single() cpairs()函数都来自于gclus包。

第一步,选出需要的变量,并计算他们的相关系数的绝对值。
第二步,使用dmat.color()获取绘图颜色。给定一个对称矩阵,dmat.color()将返回一个颜色矩阵。
第三步,排序。通过order.single()散点图矩阵将根据新的变量顺序(myorder)和颜色列表(mycolor)绘图上色,gap使得矩阵各单元格间的间距稍微增大一些。

 library(gclus)
mydata=mtcars[c(1,3,5,6)]
mydata.corr=abs(cor(mydata))
mycolors=dmat.color(mydata.corr)
myorder=order.single(mydata.corr)
cpairs(mydata,myorder,panel.colors=mycolors,gap=.5,main="Variables Ordered and Colored by Correlation")


set.seed(1234)
n=10000
c1=matrix(rnorm(n,mean=0,sd=.5),ncol=2)
 c2=matrix(rnorm(n,mean=3,sd=2),ncol=2)
mydata=rbind(c1,c2)
mydata=as.data.frame(mydata)
names(mydata)=c("x","y")
with(mydata,plot(x,y,pch=19,main="Scatter Plot with 10000 Observations"))


针对上述数据点的重叠导致识别xy间关系变得异常困难。可以使用封箱、颜色和透明度来知名途中人一点上重叠点的数目。
smoothScatter()函数可利用核密度估计声称用颜色密度来表示店分布的散点图。
with(mydata,smoothScatter(x,y,main="Scatterplot Colored by Smoothed Densities"))
KernSmooth 2.23 loaded
Copyright M. P. Wand 1997-2009

hexbin包中的hexbin() 函数将二元变量的封箱放到六边形单元格中(图形比名称更直观)

library(hexbin)
with(mydata,{
bin=hexbin(x,y,xbins=50)
plot(bin,main="Hexagonal Binning with 10000 Observations")
})



IDPmisc包中的iplot()函数也可以通过颜色来展示店的密度(特定点上的数据数目)。


with(mydata,iplot(x,y,main="Image Scatter Plot with Color Indicating Density"))



三维散点图

可以用scatterplot3d中的scatterplot3d()函数来绘制他们的关系。
library(scatterplot3d)
attach(mtcars)
scatterplot3d(wt,disp,mpg,pch=16,highlight.3d=TRUE,type="h",main="Basic 3D Scatter Plot")


fit=lm(mpg~wt+disp)
s3d$plane3d(fit)



气泡图

先创建一个二维散点图,然后点的大小代表第三个变量的值。
sysbols(x,y,circle=radius)
inches是比例因子,控制着圆圈大小(就默认最大圆圈为1inch)text()函数是可选函数,添加各个汽车名称。
一般来说,统计热源倾向于避免使用气泡图,相对于长度来说,人们对于体积或面积判断更吃力。但是在商业应用中非常受欢迎。
attach(mtcars)
r=sqrt(disp/pi)
symbols(wt,mpg,circle=r,inches=0.30,fg="white",bg="lightblue",main="Bubble Plot with point size proportional to displacement",ylab="Miles Per Gallon",xlab="Weight of Car(lbs/1000)")
text(wt,mpg,rownames(mtcars),cex=0.6)
detach(mtcars)




折线图

相关图

相关系数矩阵是多元统计分析的一个基本方法。
哪些被考察的变量与其他变量相关性很强,哪些不强?
相关变量是否以某种特定的方式聚集在一起?
随着变量数的增加,这类问题将变得更难回答。

> options(digits=2)
> cor(mtcars)
       mpg   cyl  disp    hp   drat    wt   qsec    vs     am
mpg   1.00 -0.85 -0.85 -0.78  0.681 -0.87  0.419  0.66  0.600
cyl  -0.85  1.00  0.90  0.83 -0.700  0.78 -0.591 -0.81 -0.523
disp -0.85  0.90  1.00  0.79 -0.710  0.89 -0.434 -0.71 -0.591
hp   -0.78  0.83  0.79  1.00 -0.449  0.66 -0.708 -0.72 -0.243
drat  0.68 -0.70 -0.71 -0.45  1.000 -0.71  0.091  0.44  0.713
wt   -0.87  0.78  0.89  0.66 -0.712  1.00 -0.175 -0.55 -0.692
qsec  0.42 -0.59 -0.43 -0.71  0.091 -0.17  1.000  0.74 -0.230
vs    0.66 -0.81 -0.71 -0.72  0.440 -0.55  0.745  1.00  0.168
am    0.60 -0.52 -0.59 -0.24  0.713 -0.69 -0.230  0.17  1.000
gear  0.48 -0.49 -0.56 -0.13  0.700 -0.58 -0.213  0.21  0.794
carb -0.55  0.53  0.39  0.75 -0.091  0.43 -0.656 -0.57  0.058
      gear   carb
mpg   0.48 -0.551
cyl  -0.49  0.527
disp -0.56  0.395
hp   -0.13  0.750
drat  0.70 -0.091
wt   -0.58  0.428
qsec -0.21 -0.656
vs    0.21 -0.570
am    0.79  0.058
gear  1.00  0.274
carb  0.27  1.000

这里使用的是corrgram包中的corrgram()函数。
下三角单元格中:
默认蓝色和从左下指向右上的斜杠表示单元格中的两个变量呈正相关。反过来,红色且从左上指向右下的斜杠表示负相关。
色彩越深,饱和度越高,说明变化相关性越大。
相关性接近于0的单元格基本物色。
上三角单元格中:
颜色功能同上,但相关性大小由被填充的饼图块大小展示出来。争先惯性将从12点钟处开始顺时针填充饼图,而负相关将逆时针填充饼图。
order=TRUE时候,相关矩阵将使用PCA分析对变量重新排序。
panel设定非对角线使用的元素的类型。lower.panel upper.panel ; panel.pie(饼图)/panel.shade(阴影深度)/panel.ellipse(置信椭圆)/panel.pts(平滑拟合曲线
text.panel and diag.panel 控制着主对角线元素类型。panel.minmax(输出最大最小值)/panel.txt

library(corrgram)
corrgram(mtcars,order=TRUE,lower.panel=panel.shade,upper.panel=panel.pie,text.panel=panel.txt,main="Correlogram of mtcars intercorrelations")



corrgram(mtcars,order=TRUE,lower.panel=panel.ellipse,upper.panel=panel.pts,text.panel=panel.txt,diag.panel=panel.minmax,main="Correlogram of mtcars data using scatter plots and ellipses")
corrgram(mtcars,lower.panel=panel.shade,upper.panel=NULL,text.panel=panel.txt,main="Car Mileage Data(unsorted)")



马赛克图


转贴请注明:http://blog.csdn.net/disappearedgod/article/details/8681312

  • 56
    点赞
  • 405
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值