R程序可视化&x2B;如何在分类数据和数字数据之间绘图

R程序可视化&x2B;如何在分类数据和数字数据之间绘图,r,ggplot2,numerical,R,Ggplot2,Numerical,我想开发一个可视化图形,在x轴上显示日期,在Y轴上显示a、B、C值。A值为分类数据,B、c为数值数据。在x轴中,日期应以月和日表示,如(01/07、02/07)。这里的问题是A值是分类数据,B值是数字数据。可视化图表不应为条形图。它类似于散点图 我不知道怎么做这个。你的帮助将是非常值得赞赏的。谢谢 dput(df) structure(list(Date = structure(list(sec = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

我想开发一个可视化图形,在x轴上显示日期,在Y轴上显示a、B、C值。A值为分类数据,B、c为数值数据。在x轴中,日期应以月和日表示,如(01/07、02/07)。这里的问题是A值是分类数据,B值是数字数据。可视化图表不应为条形图。它类似于散点图

我不知道怎么做这个。你的帮助将是非常值得赞赏的。谢谢

     dput(df)

     structure(list(Date = structure(list(sec = c(0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0), min = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
     0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
     0L, 0L, 0L, 0L, 0L), hour = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
     0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
     0L, 0L, 0L, 0L, 0L, 0L, 0L), mday = 1:31, mon = c(6L, 6L, 6L, 
     6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
     6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L), year = c(116L, 
     116L, 116L, 116L, 116L, 116L, 116L, 116L, 116L, 116L, 116L, 116L, 
     116L, 116L, 116L, 116L, 116L, 116L, 116L, 116L, 116L, 116L, 116L, 
     116L, 116L, 116L, 116L, 116L, 116L, 116L, 116L), wday = c(5L, 
     6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L, 
     1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L), yday =                         182:212, 
isdst = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L), zone = c("JST", "JST", "JST", "JST", "JST", 
"JST", "JST", "JST", "JST", "JST", "JST", "JST", "JST", "JST", 
"JST", "JST", "JST", "JST", "JST", "JST", "JST", "JST", "JST", 
"JST", "JST", "JST", "JST", "JST", "JST", "JST", "JST"), 
gmtoff = c(NA_integer_, NA_integer_, NA_integer_, NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_, 
NA_integer_, NA_integer_)), .Names = c("sec", "min", "hour", 
"mday", "mon", "year", "wday", "yday", "isdst", "zone", "gmtoff"
), class = c("POSIXlt", "POSIXt"), tzone = "Asia/Tokyo"), A =     
structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,    
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("N",    
"YES"), class = "factor"), B = c(0L, 0L, 0L, 0L, 1L, 3L, 5L, 
10L, 9L, 8L, 7L, 6L, 5L, 4L, 3L, 2L, 1L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), C = c(0L, 0L, 0L, 0L, 1L, 
3L, 5L, 10L, 9L, 8L, 7L, 6L, 5L, 4L, 3L, 2L, 1L, 5L, 10L, 9L, 
8L, 7L, 6L, 5L, 4L, 3L, 2L, 1L, 10L, 9L, 8L)), .Names = c("Date", 
"A", "B", "C"), row.names = c(NA, -31L), class = "data.frame")


        sample data:

        Date   A  B  C
        1  2016-07-01   N  0  0
        2  2016-07-02   N  0  0
        3  2016-07-03   N  0  0
        4  2016-07-04   N  0  0
        5  2016-07-05   N  1  1
        6  2016-07-06   N  3  3
        7  2016-07-07   N  5  5
        8  2016-07-08   N 10 10
        9  2016-07-09   N  9  9
        10 2016-07-10   N  8  8
        11 2016-07-11   N  7  7
        12 2016-07-12   N  6  6
        13 2016-07-13   N  5  5
        14 2016-07-14   N  4  4
        15 2016-07-15   N  3  3
        16 2016-07-16   N  2  2
        17 2016-07-17   N  1  1
        18 2016-07-18   N  0  5
        19 2016-07-19   N  0 10
        20 2016-07-20   N  0  9
        21 2016-07-21   N  0  8
        22 2016-07-22   N  0  7
        23 2016-07-23   N  0  6
        24 2016-07-24 YES  0  5
        25 2016-07-25   N  0  4
        26 2016-07-26   N  0  3
        27 2016-07-27   N  0  2
        28 2016-07-28   N  0  1
        29 2016-07-29   N  0 10
        30 2016-07-30   N  0  9
        31 2016-07-31   N  0  8
我试过这个密码。它适用于一个值,如B。。当我试着把C值和B值一起画出来时,图看起来不一样

 library(scales)
 library(ggplot2)
 ggplot(df, aes(x = Date, y = B)) +
 geom_line(aes(y=B,group=1),colour="#000099") +
 geom_point(size=2, colour="#CC0000") +   
 scale_y_continuous(breaks = seq(0, 50, by = 1)) + 
 scale_x_datetime(date_breaks = "2 day")

这里有一种可能的方法。我不确定这是否理想,但希望对您的情况有所帮助:

使用标记
#库(devtools)
#安装github(“ropensci/plotly”)
图书馆(绘本)
图书馆(动物园)
df$日期%
添加标记(y=~C,标记=列表(大小=10,符号=“圆圈”),
name=“C”)%%>%
添加标记(y=~A,标记=列表(大小=20,symbol=“菱形打开”),
name=“A”,yaxis=“y2”)%%>%
布局(xaxis=list(domain=c(0,0.9)),
yaxis2=列表(side=“right”,anchor=“xaxis”,overlaying=“y”,title=“A”),
yaxis=列表(title=“B/C”))

使用线条
#库(devtools)
#安装.github(“ropensci/plotly”)
图书馆(绘本)
df$x%
添加线(y=~C,线=列表(宽度=5,破折号=5px”),
name=“C”)%%>%
添加标记(y=~A,标记=列表(大小=15,符号=“交叉”),
name=“A”,yaxis=“y2”)%%>%
布局(xaxis=list(domain=c(0,0.9),title=“”,
tickmode=“数组”,
滴答声=~x,
ticktext=~日期,
勾选字体=列表(大小=10)),
yaxis2=列表(side=“right”,anchor=“xaxis”,overlaying=“y”,title=“A”),
yaxis=列表(title=“B/C”))

如何将A与B和C一起放在Y轴上?看起来Y轴(对于B和C)将从0运行到10;但在这张图上“N”和“是”在哪里?这不太合理,是的。这就是我所关心的。这是一些重要的应用。每当A中有“是”时,其他两列B、C都是不同的。我的意思是,我认为你应该考虑一些不同的方式来可视化数据,而不是将一个分类和数值变量叠加到同一轴上,这实际上没有任何意义。可视化的选择可能取决于您的应用程序和您希望显示的内容。也许你可以为每个“是”和“否”分别绘制一个(B&C)和(日期)的图,并将它们排列在彼此下面,以便比较。或者您可以使用颜色来表示哪些B/C点是“是”,哪些是“否”。取决于什么对你的数据有意义。谢谢royr2。是否有可能在图形中绘制具有B和C值的曲线,以找到模式。还有休息1天或2天的日期。谢谢。。这段代码对我帮助很大,而且很有魅力。有没有办法,我只能通过排除年来在X轴上添加月和日。是的-而不是执行
df$Date
#library(devtools)
#install_github("ropensci/plotly")

library(plotly)
library(zoo)

df$Date <- as.yearmon(df$Date)
df$Date <- as.Date(df$Date)

plot_ly(df, x = ~Date) %>% 
    add_markers(y = ~B, marker = list(size = 15, symbol = "cross"), 
                name = "B") %>% 

    add_markers(y = ~C, marker = list(size = 10, symbol = "circle"),
                name = "C") %>% 

    add_markers(y = ~A, marker = list(size = 20, symbol = "diamond-open"),
                name = "A", yaxis = "y2") %>% 

    layout(xaxis = list(domain = c(0, 0.9)),
           yaxis2 = list(side = "right", anchor = "xaxis", overlaying = "y", title = "A"),
           yaxis = list(title = "B/C"))
#library(devtools)
#install.github("ropensci/plotly")

library(plotly)

df$x <- 1:nrow(df)
df$Date <- as.character(as.Date(df$Date))

plot_ly(df, x = ~x) %>% 

    add_lines(y = ~B, line = list(width = 5), opacity = "0.5",
              name = "B") %>% 

    add_lines(y = ~C, line = list(width = 5, dash = "5px"),
              name = "C") %>% 

    add_markers(y = ~A, marker = list(size = 15, symbol = "cross"),
                name = "A", yaxis = "y2") %>% 

    layout(xaxis = list(domain = c(0, 0.9), title = "",
                        tickmode = "array",
                        tickvals = ~x,
                        ticktext = ~Date,
                        tickfont = list(size = 10)),
           yaxis2 = list(side = "right", anchor = "xaxis", overlaying = "y", title = "A"),
           yaxis = list(title = "B/C"))