使用R包ComplexHeatmap繪制復雜熱圖_2020-04-07

## 1.設(shè)置當前工作目錄

setwd("./ComplexHeatmap")

## 2.安裝和導入R包:ComplexHeatmap

### 2.1 Bioconductor安裝

if (!requireNamespace("BiocManager", quietly = TRUE))

? install.packages("BiocManager")

BiocManager::install("ComplexHeatmap")

### 2.2 導入R包

library(ComplexHeatmap)

library(openxlsx)

## 3.R包簡要信息

### 3.1 Description

# Package: ComplexHeatmap

# Type: Package

# Title: Make Complex Heatmaps

# Version: 2.2.0

# Date: 2019-10-22

# Author: Zuguang Gu

# Maintainer: Zuguang Gu <z.gu@dkfz.de>

#? Depends: R (>= 3.1.2), methods, grid, graphics, stats, grDevices

# Imports: circlize (>= 0.4.5), GetoptLong, colorspace, clue,

# RColorBrewer, GlobalOptions (>= 0.1.0), parallel, png

# Suggests: testthat (>= 1.0.0), knitr, markdown, dendsort, Cairo, jpeg,

# tiff, fastcluster, dendextend (>= 1.0.1), grImport, grImport2,

# glue, GenomicRanges

# VignetteBuilder: knitr

# Description: Complex heatmaps are efficient to visualize associations

# between different sources of data sets and reveal potential patterns.

# Here the ComplexHeatmap package provides a highly flexible way to arrange

# multiple heatmaps and supports various annotation graphics.

# biocViews: Software, Visualization, Sequencing

# URL: https://github.com/jokergoo/ComplexHeatmap,

# https://jokergoo.github.io/ComplexHeatmap-reference/book/

#? License: MIT + file LICENSE

# git_url: https://git.bioconductor.org/packages/ComplexHeatmap

# git_branch: RELEASE_3_10

# git_last_commit: 8ef3ec8

# git_last_commit_date: 2019-10-29

# Date/Publication: 2019-10-29

# NeedsCompilation: no

# Packaged: 2019-10-30 03:00:31 UTC; biocbuild

# Built: R 3.6.1; ; 2019-10-30 12:58:59 UTC; windows

### 3.2 Main function

ls(package:ComplexHeatmap)

# [1] "%v%"

# [2] "[.AnnotationFunction"

# [3] "[.comb_mat"

# [4] "[.Heatmap"

# [5] "[.HeatmapAnnotation"

# [6] "[.HeatmapList"

# [7] "[.SingleAnnotation"

# [8] "+.AdditiveUnit"

# [9] "add_heatmap"

# [10] "AdditiveUnit"

# [11] "adjust_dend_by_x"

# [12] "adjust_heatmap_list"

# [13] "anno_barplot"

# [14] "anno_block"

# [15] "anno_boxplot"

# [16] "anno_density"

# [17] "anno_empty"

# [18] "anno_histogram"

# [19] "anno_horizon"

# [20] "anno_image"

# [21] "anno_joyplot"

# [22] "anno_lines"

# [23] "anno_link"

# [24] "anno_mark"

# [25] "anno_oncoprint_barplot"

# [26] "anno_points"

# [27] "anno_simple"

# [28] "anno_summary"

# [29] "anno_text"

# [30] "anno_zoom"

# [31] "annotation_axis_grob"

# [32] "annotation_legend_size"

# [33] "AnnotationFunction"

# [34] "c.ColorMapping"

# [35] "c.HeatmapAnnotation"

# [36] "cluster_within_group"

# [37] "color_mapping_legend"

# [38] "ColorMapping"

# [39] "column_dend"

# [40] "column_order"

# [41] "columnAnnotation"

# [42] "comb_degree"

# [43] "comb_name"

# [44] "comb_size"

# [45] "component_height"

# [46] "component_width"

# [47] "copy_all"

# [48] "decorate_annotation"

# [49] "decorate_column_dend"

# [50] "decorate_column_names"

# [51] "decorate_column_title"

# [52] "decorate_dend"

# [53] "decorate_dimnames"

# [54] "decorate_heatmap_body"

# [55] "decorate_row_dend"

# [56] "decorate_row_names"

# [57] "decorate_row_title"

# [58] "decorate_title"

# [59] "default_axis_param"

# [60] "default_get_type"

# [61] "dend_heights"

# [62] "dend_xy"

# [63] "dendrogramGrob"

# [64] "densityHeatmap"

# [65] "dim.Heatmap"

# [66] "dist2"

# [67] "draw"

# [68] "draw_annotation"

# [69] "draw_annotation_legend"

# [70] "draw_dend"

# [71] "draw_dimnames"

# [72] "draw_heatmap_body"

# [73] "draw_heatmap_legend"

# [74] "draw_heatmap_list"

# [75] "draw_title"

# [76] "extract_comb"

# [77] "get_color_mapping_list"

# [78] "get_legend_param_list"

# [79] "getXY_in_parent_vp"

# [80] "grid.annotation_axis"

# [81] "grid.boxplot"

# [82] "grid.dendrogram"

# [83] "grid.draw.Legends"

# [84] "Heatmap"

# [85] "heatmap_legend_size"

# [86] "HeatmapAnnotation"

# [87] "HeatmapList"

# [88] "height.AnnotationFunction"

# [89] "height.Heatmap"

# [90] "height.HeatmapAnnotation"

# [91] "height.HeatmapList"

# [92] "height.Legends"

# [93] "height.SingleAnnotation"

# [94] "height<-.AnnotationFunction"

# [95] "height<-.HeatmapAnnotation"

# [96] "height<-.SingleAnnotation"

# [97] "heightDetails.annotation_axis"

# [98] "heightDetails.legend"

# [99] "heightDetails.legend_body"

# [100] "heightDetails.packed_legends"

# [101] "ht_global_opt"

# [102] "ht_opt"

# [103] "is_abs_unit"

# [104] "Legend"

# [105] "Legends"

# [106] "length.HeatmapAnnotation"

# [107] "length.HeatmapList"

# [108] "list_components"

# [109] "list_to_matrix"

# [110] "make_column_cluster"

# [111] "make_comb_mat"

# [112] "make_layout"

# [113] "make_row_cluster"

# [114] "map_to_colors"

# [115] "max_text_height"

# [116] "max_text_width"

# [117] "merge_dendrogram"

# [118] "names.HeatmapAnnotation"

# [119] "names.HeatmapList"

# [120] "names<-.HeatmapAnnotation"

# [121] "ncol.Heatmap"

# [122] "nobs.AnnotationFunction"

# [123] "nobs.HeatmapAnnotation"

# [124] "nobs.SingleAnnotation"

# [125] "normalize_comb_mat"

# [126] "nrow.Heatmap"

# [127] "oncoPrint"

# [128] "order.comb_mat"

# [129] "packLegend"

# [130] "pindex"

# [131] "prepare"

# [132] "print.comb_mat"

# [133] "re_size"

# [134] "restore_matrix"

# [135] "row_anno_barplot"

# [136] "row_anno_boxplot"

# [137] "row_anno_density"

# [138] "row_anno_histogram"

# [139] "row_anno_link"

# [140] "row_anno_points"

# [141] "row_anno_text"

# [142] "row_dend"

# [143] "row_order"

# [144] "rowAnnotation"

# [145] "set_component_height"

# [146] "set_component_width"

# [147] "set_name"

# [148] "set_size"

# [149] "SingleAnnotation"

# [150] "size.AnnotationFunction"

# [151] "size.HeatmapAnnotation"

# [152] "size.SingleAnnotation"

# [153] "size<-.AnnotationFunction"

# [154] "size<-.HeatmapAnnotation"

# [155] "size<-.SingleAnnotation"

# [156] "smartAlign2"

# [157] "str.comb_mat"

# [158] "subset_gp"

# [159] "subset_matrix_by_row"

# [160] "subset_vector"

# [161] "summary.Heatmap"

# [162] "summary.HeatmapList"

# [163] "t.comb_mat"

# [164] "test_alter_fun"

# [165] "unify_mat_list"

# [166] "UpSet"

# [167] "upset_right_annotation"

# [168] "upset_top_annotation"

# [169] "width.AnnotationFunction"

# [170] "width.Heatmap"

# [171] "width.HeatmapAnnotation"

# [172] "width.HeatmapList"

# [173] "width.Legends"

# [174] "width.SingleAnnotation"

# [175] "width<-.AnnotationFunction"

# [176] "width<-.HeatmapAnnotation"

# [177] "width<-.SingleAnnotation"

# [178] "widthDetails.annotation_axis"

# [179] "widthDetails.legend"

# [180] "widthDetails.legend_body"

# [181] "widthDetails.packed_legends"

## 4.測試

### 4.1 讀取測試數(shù)據(jù)

data <- read.xlsx("Protein_Expression_Data.xlsx",

? ? ? ? ? ? ? ? ? sheet = "data",

? ? ? ? ? ? ? ? ? startRow = 1,

? ? ? ? ? ? ? ? ? colNames = T,

? ? ? ? ? ? ? ? ? rowNames = F,

? ? ? ? ? ? ? ? ? detectDates = F)

dim(data)

# [1] 591? 19

colnames(data)

# [1] "Accession"? ? ? ? ? ? ? ?

# [2] "Gene.Name"? ? ? ? ? ? ? ?

# [3] "Description"? ? ? ? ? ? ?

# [4] "Coverage.[%]"? ? ? ? ? ? ?

# [5] "#.Peptides"? ? ? ? ? ? ? ?

# [6] "#.PSMs"? ? ? ? ? ? ? ? ? ?

# [7] "#.Unique.Peptides"? ? ? ?

# [8] "#.AAs"? ? ? ? ? ? ? ? ? ?

# [9] "MW.[kDa]"? ? ? ? ? ? ? ? ?

# [10] "calc..pI"? ? ? ? ? ? ? ? ?

# [11] "Score.Sequest.HT:.Sequest.HT"

# [12] "C1"? ? ? ? ? ? ? ? ? ? ? ?

# [13] "T2"? ? ? ? ? ? ? ? ? ? ? ?

# [14] "C3"? ? ? ? ? ? ? ? ? ? ? ?

# [15] "T4"? ? ? ? ? ? ? ? ? ? ? ?

# [16] "C5"? ? ? ? ? ? ? ? ? ? ? ?

# [17] "T6"? ? ? ? ? ? ? ? ? ? ? ?

# [18] "C7"? ? ? ? ? ? ? ? ? ? ? ?

# [19] "T8"

#@ 提取所需要的列

data_clean <- data[,12:19]

dim(data_clean)

# [1] 591? 8

#@ 合并新的蛋白表達矩陣數(shù)據(jù)

data_clean_new <- data.frame(data$Accession, data_clean)

#@ 修改列名

colnames(data_clean_new)[1] <- "Accession"

#@ 查看前六行數(shù)據(jù)

head(data_clean_new)

# Accession? ? C1? T2? ? C3? ? T4? ? C5? ? T6? ? C7? ? T8

# 1? ? P04114 105.2 93.8 125.2 139.6? 82.8? 76.9? 74.2 102.2

# 2? ? P0C0L5? 68.9 74.7 121.7 122.0? 85.3? 98.4 114.2 114.8

# 3? ? P0C0L4? 88.4 95.4 111.9 133.2? 81.3 101.6 103.9? 84.3

# 4? ? P02768? 90.9 84.0 110.1? 89.3 120.8 100.5 101.1 103.2

# 5? ? P01024? 89.5 83.9 105.0? 94.8? 97.6? 70.5 121.2 137.5

# 6? ? P00734? 93.2 92.9 101.1 130.4? 76.5 110.0 107.9? 88.1

rownames(data_clean_new) <- data_clean_new$Accession

data_clean_new$Accession <- NULL

right_annotation <- colMeans(data_clean_new)

class(right_annotation)

# [1] "numeric"

data_clean_new <- as.matrix(data_clean_new)

##********************************************************##

### 4.2 繪制barplot_heatmap ###

#### 4.2.1 colMean

ha = HeatmapAnnotation(barplot = anno_barplot(right_annotation, height = unit(3, "cm"),

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? box_width = 0.9, outline = FALSE, gp = gpar(fill = 1:8)))

Heatmap(data_clean_new,

? ? ? ? name = "protein exp",

? ? ? ? top_annotation = ha,

? ? ? ? na_col = "grey",

? ? ? ? row_names_gp = gpar(fontsize = 0.5),

? ? ? ? column_names_gp = gpar(fontsize = 16))

?

#### 4.2.2 colSum

right_annotation <- colSums(data_clean_new)

ha = HeatmapAnnotation(barplot = anno_barplot(right_annotation, height = unit(3, "cm"),

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? box_width = 0.9, outline = FALSE, gp = gpar(fill = 1:8)))

Heatmap(data_clean_new,

? ? ? ? name = "protein exp",

? ? ? ? top_annotation = ha,

? ? ? ? na_col = "grey",

? ? ? ? row_names_gp = gpar(fontsize = 0.5),

? ? ? ? column_names_gp = gpar(fontsize = 16))

?

### 4.3 boxplot_heatmap ###

#### 4.3.1 default color

ha = HeatmapAnnotation(boxplot = anno_boxplot(data_clean_new, height = unit(3, "cm"), box_width = 0.9, outline = FALSE))

Heatmap(data_clean_new,

? ? ? ? name = "protein exp",

? ? ? ? top_annotation = ha,

? ? ? ? na_col = "grey",

? ? ? ? row_names_gp = gpar(fontsize = 0.5),

? ? ? ? column_names_gp = gpar(fontsize = 16))

?

#### 4.3.2 custom color

ha = HeatmapAnnotation(boxplot = anno_boxplot(data_clean_new, height = unit(3, "cm"), box_width = 0.9, outline = FALSE, gp = gpar(fill = 1:8)))

Heatmap(data_clean_new,

? ? ? ? name = "protein exp",

? ? ? ? top_annotation = ha,

? ? ? ? na_col = "grey",

? ? ? ? row_names_gp = gpar(fontsize = 0.5),

? ? ? ? column_names_gp = gpar(fontsize = 16))

?

### 4.4 Block annotation Heatmap ###

#### 4.4.1 top_annotation

ha <- HeatmapAnnotation(block = anno_block(gp = gpar(2:4),

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? labels = c("sample1", "sample2", "sample3"), labels_gp = gpar(col = c("green", "blue", "orange"))))

Heatmap(data_clean_new,

? ? ? ? name = "protein exp",

? ? ? ? top_annotation = ha,

? ? ? ? na_col = "grey",

? ? ? ? row_names_gp = gpar(fontsize = 0.5),

? ? ? ? column_names_gp = gpar(fontsize = 16),

? ? ? ? column_km = 3)

?

#### 4.4.2 left_annotation

ha <- rowAnnotation(block = anno_block(gp = gpar(2:4),

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? labels = c("group1", "group2", "group3", "group4", "group5"), labels_gp = gpar(col = c("green", "blue", "orange", "red", "purple"))))

Heatmap(data_clean_new,

? ? ? ? name = "protein exp",

? ? ? ? left_annotation = ha,

? ? ? ? na_col = "grey",

? ? ? ? row_names_gp = gpar(fontsize = 0.5),

? ? ? ? column_names_gp = gpar(fontsize = 16),

? ? ? ? row_km = 5)

?

#### 4.4.3 Combine top and left annotation

top_annotation <- HeatmapAnnotation(block = anno_block(gp = gpar(2:4),

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? labels = c("sample1", "sample2", "sample3"), labels_gp = gpar(col = c("green", "blue", "orange"))))

left_annotation <- rowAnnotation(block = anno_block(gp = gpar(2:4),

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? labels = c("group1", "group2", "group3", "group4", "group5"), labels_gp = gpar(col = c("green", "blue", "orange", "red", "purple"))))

Heatmap(data_clean_new,

? ? ? ? name = "protein exp",

? ? ? ? top_annotation = top_annotation,

? ? ? ? left_annotation = left_annotation,

? ? ? ? na_col = "grey",

? ? ? ? row_names_gp = gpar(fontsize = 0.5),

? ? ? ? column_names_gp = gpar(fontsize = 16),

? ? ? ? column_km = 3,

? ? ? ? row_km = 5)

?

### 4.5 anno_density

ha <- HeatmapAnnotation(density = anno_density(data_clean_new, gp = gpar(fill = 1:8)))

Heatmap(data_clean_new,

? ? ? ? name = "protein exp",

? ? ? ? top_annotation = ha,

? ? ? ? na_col = "grey",

? ? ? ? row_names_gp = gpar(fontsize = 0.5),

? ? ? ? column_names_gp = gpar(fontsize = 16))

?

### 4.6 histogram annotation

ha <- HeatmapAnnotation(histogram = anno_histogram(data_clean_new, gp = gpar(fill = 1:8)))

Heatmap(data_clean_new,

? ? ? ? name = "protein exp",

? ? ? ? top_annotation = ha,

? ? ? ? na_col = "grey",

? ? ? ? row_names_gp = gpar(fontsize = 0.5),

? ? ? ? column_names_gp = gpar(fontsize = 16))

?

### 4.7 joyplot annotation

ha <- HeatmapAnnotation(joyplot = anno_joyplot(data_clean_new, gp = gpar(fill = 1:8)))

draw(ha, test = "joyplot")

Heatmap(data_clean_new,

? ? ? ? name = "protein exp",

? ? ? ? top_annotation = ha,

? ? ? ? na_col = "grey",

? ? ? ? row_names_gp = gpar(fontsize = 0.5),

? ? ? ? column_names_gp = gpar(fontsize = 16))

?

### 4.8 lines annotation

ha <- rowAnnotation(lines = anno_lines(data_clean_new, add_points = TRUE, pt_gp = gpar(col = 5:6), pch = c(1, 16)))

draw(ha, test = "lines")

Heatmap(data_clean_new,

? ? ? ? name = "protein exp",

? ? ? ? left_annotation = ha,

? ? ? ? na_col = "grey",

? ? ? ? row_names_gp = gpar(fontsize = 0.5),

? ? ? ? column_names_gp = gpar(fontsize = 16))

?

## 5.結(jié)束

sessionInfo()

# R version 3.6.3 (2020-02-29)

# Platform: x86_64-w64-mingw32/x64 (64-bit)

# Running under: Windows 10 x64 (build 18363)

#

# Matrix products: default

#

# locale:

#? [1] LC_COLLATE=Chinese (Simplified)_China.936

# [2] LC_CTYPE=Chinese (Simplified)_China.936

# [3] LC_MONETARY=Chinese (Simplified)_China.936

# [4] LC_NUMERIC=C? ? ? ? ? ? ? ? ? ? ? ? ? ?

# [5] LC_TIME=Chinese (Simplified)_China.936?

#

# attached base packages:

#? [1] grid? ? ? stats? ? graphics? grDevices utils? ? datasets

# [7] methods? base?

#

# other attached packages:

#? [1] openxlsx_4.1.4? ? ? ComplexHeatmap_2.2.0

#

# loaded via a namespace (and not attached):

#? [1] Rcpp_1.0.4? ? ? ? ? rstudioapi_0.11? ? cluster_2.1.0? ?

# [4] hms_0.5.3? ? ? ? ? progress_1.2.2? ? ? colorspace_1.4-1

# [7] clue_0.3-57? ? ? ? rjson_0.2.20? ? ? ? R6_2.4.1? ? ? ?

# [10] rlang_0.4.5? ? ? ? tools_3.6.3? ? ? ? parallel_3.6.3?

# [13] circlize_0.4.8? ? ? png_0.1-7? ? ? ? ? crayon_1.3.4? ?

# [16] zip_2.0.4? ? ? ? ? BiocManager_1.30.10 RColorBrewer_1.1-2

# [19] vctrs_0.2.4? ? ? ? GlobalOptions_0.1.1 shape_1.4.4? ? ?

# [22] stringi_1.4.6? ? ? compiler_3.6.3? ? ? prettyunits_1.1.1

# [25] pkgconfig_2.0.3? ? GetoptLong_0.1.8

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子馍惹,更是在濱河造成了極大的恐慌吉拳,老刑警劉巖揖膜,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猪贪,死亡現(xiàn)場離奇詭異录平,居然都是意外死亡叠聋,警方通過查閱死者的電腦和手機撕阎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碌补,“玉大人虏束,你說我怎么就攤上這事∠谜拢” “怎么了镇匀?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長袜啃。 經(jīng)常有香客問我汗侵,道長,這世上最難降的妖魔是什么群发? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任晃择,我火速辦了婚禮,結(jié)果婚禮上也物,老公的妹妹穿的比我還像新娘宫屠。我一直安慰自己,他們只是感情好滑蚯,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布浪蹂。 她就那樣靜靜地躺著抵栈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坤次。 梳的紋絲不亂的頭發(fā)上古劲,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天,我揣著相機與錄音缰猴,去河邊找鬼产艾。 笑死,一個胖子當著我的面吹牛滑绒,可吹牛的內(nèi)容都是我干的闷堡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼疑故,長吁一口氣:“原來是場噩夢啊……” “哼杠览!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起纵势,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤踱阿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后钦铁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體软舌,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年牛曹,在試婚紗的時候發(fā)現(xiàn)自己被綠了葫隙。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡躏仇,死狀恐怖恋脚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情焰手,我是刑警寧澤糟描,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站书妻,受9級特大地震影響船响,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜躲履,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一见间、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧工猜,春花似錦米诉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拴泌。三九已至,卻和暖如春惊橱,著一層夾襖步出監(jiān)牢的瞬間蚪腐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工税朴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留回季,地道東北人。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓正林,卻偏偏與公主長得像泡一,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子卓囚,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容