R能不能绘制这种图形??

COS论坛 | 统计之都 COS论坛 | 统计之都 软件应用 S-Plus & R语言 R能不能绘制这种图形??

该主题包含 24 条回复,14个帖子,最后由  bemyselfcc3 年, 2 月 之前 更新。

查看 15 个帖子 - 1 到 15(总计 25 个)
  • 作者
    帖子
  • 1 楼

    littledwheat
    Participant

    论坛好像不能传图片,类型名称也忘了
    可以用作统计特征人口,整个人口用几排相同的小人表示,然后某一特征的人涂成特定颜色
    R能制作这样的图形吗?

    2 楼

    doctorjxd
    Participant

    利用怡轩的showtext包,结合自己乱画的小人儿字体,在ggplot2里面:
    五湖四海大联盟[s:11] pdf矢量支持哦[s:17]

    3 楼

    qxde01
    Participant

    回复 第2楼 的 doctorjxd:论坛怎样插入图片?

    4 楼

    Ihavenothing
    Keymaster

    回复 第2楼 的 doctorjxd:
    我了个去,牛大发了!!!

    5 楼

    Ihavenothing
    Keymaster

    回复 第3楼 的 qxde01:
    自带附件确实会方便些,但太难管理,可移植性不好。之前稍微动了一下论坛系统,附件就死了一大片。现在都用imgur装图,也不算太麻烦。

    6 楼

    zggjtsgzczh
    Participant

    回复 第2楼 的 doctorjxd:
    仔仔体?你真是精力旺盛,技术就是这样被滥用的——我怀疑他所说的那种图很有可能是类似于《经济学人》或其他机构发布的报告或专业刊物上面的那种图表,那些图片多数是用AI和PS美工合成的。

    7 楼

    ming_uld
    Moderator

    回复 第2楼 的 doctorjxd:亮了!

    8 楼

    Ihavenothing
    Keymaster

    回复 第2楼 的 doctorjxd:
    求字体文件!

    9 楼

    Ihavenothing
    Keymaster

    我来凑个热闹。[s:11]

    link = "http://img.dafont.com/dl/?f=wm_people_1";
    download.file(link, "wmpeople1.zip", mode = "wb");
    unzip("wmpeople1.zip");
    library(showtext);
    font.add("wmpeople1", "wmpeople1.ttf");
    library(ggplot2);
    library(plyr);
    library(Cairo);
    dat = read.csv(textConnection('
    edu,educode,gender,population
    未上过学,1,男,17464
    未上过学,1,女,41268
    小  学,2,男,139378
    小  学,2,女,154854
    初  中,3,男,236369
    初  中,3,女,205537
    高  中,4,男,94528
    高  中,4,女,70521
    大专及以上,5,男,57013
    大专及以上,5,女,50334
    '));
    dat$int = round(dat$population / 10000);
    gdat = ddply(dat, "educode", function(d) {
        male = d$int[d$gender == "男"];
        female = d$int[d$gender == "女"];
        data.frame(gender = c(rep("男", male), rep("女", female)),
                   x = 1:(male + female));
    });
    gdat$char = ifelse(gdat$gender == "男", "p", "u");
    CairoPNG("edu.png", 600, 300, pointsize = 15);
    showtext.begin();
    ggplot(gdat, aes(x = x, y = educode)) +
        geom_text(aes(label = char, colour = gender),
                  family = "wmpeople1", size = 7) +
        scale_x_continuous("人数(千万)") +
        scale_y_discrete("受教育程度",
            labels = unique(dat$edu[order(dat$educode)])) +
        scale_colour_manual("性别", values = c("#00BFC4", "#F8766D")) +
        ggtitle("2012年统计数据");
    showtext.end();
    dev.off();

    10 楼

    daigazi
    Participant

    回复 第9楼 的 Ihavenothing:
    屌炸天这是,不过这句话报错了
    gdat = ddply(dat, “educode”, function(d) {
    male = d$int[d$gender == “男”];
    female = d$int[d$gender == “女”];
    data.frame(gender = c(rep(“男”, male), rep(“女”, female)),
    x = 1:(male + female));
    });

    11 楼

    Ihavenothing
    Keymaster

    回复 第10楼 的 daigazi:
    加载了plyr包吗?

    12 楼

    daigazi
    Participant

    回复 第11楼 的 Ihavenothing:
    加载了。
    Error in rep(“男”, male) : invalid ‘times’ argument
    rep(“nan”,c(1,3,4))这样不行

    13 楼

    Ihavenothing
    Keymaster

    回复 第12楼 的 daigazi:
    猜测是万恶的中文编码问题。只好换成下面这句了:

    gdat = ddply(dat, "educode", function(d) {
        data.frame(gender = c(rep("男", d$int[1]), rep("女", d$int[2])),
                   x = 1:sum(d$int));
    });

    14 楼

    daigazi
    Participant

    回复 第13楼 的 Ihavenothing:
    又是Error in rep(“男”, d$int[1]) : invalid ‘times’ argument
    > Sys.info()
    sysname release
    “Windows” “7 x64”
    version nodename
    “build 7601, Service Pack 1” “GAZI”
    machine login
    “x86-64” “Administrator”
    user effective_user
    “Administrator” “Administrator”

    15 楼

    Ihavenothing
    Keymaster

    回复 第14楼 的 daigazi:
    那就不知道了,你把数据中的中文都改成英文试试吧……我是一直能跑通的……

查看 15 个帖子 - 1 到 15(总计 25 个)

您必须先登录才能回复该主题。