Git Product home page Git Product logo

logolas's Introduction

Logolas

Logolas is an R package for Enrichment Depletion Logo plots with string symbols, that highlights both enrichment and depletion of symbols, as opposed to standard logo plots, as in seqLogo package, that are biased towards highlighting enrichments. Logolas also generalizes logo plots to use both characters and strings.

If you find a bug, please create an issue.

This code has been tested in ...

misc

License

Copyright (c) 2018-2019, Kushal Dey.

All source code and software in this repository are made available under the terms of the GNU General Public License. See the LICENSE file for the full text of the license.

Citing this work

If you find that this R package is useful for your work, please cite our paper which is out on BMC Bioinformatics:

Dey, K.K., Xie, D. and Stephens, M., 2018. A new sequence logo plot to highlight enrichment and depletion. BMC Bioinformatics. 19:473 https://doi.org/10.1186/s12859-018-2489-3.

Quick Start

The most recent version of Logolas is available from Github using devtools R package.First, you would require to install the following Bioconductor packages.

source("https://bioconductor.org/biocLite.R")
biocLite(c("Biostrings","BiocStyle","Biobase","seqLogo","ggseqlogo"))

Then install Logolas as follows

library(devtools)
install_github("kkdey/Logolas",build_vignettes = TRUE)

Once you have installed the package, load the package in R by entering

library(Logolas)

To get an overview of the package, enter

help(package = "Logolas")

Next, try creating a few plots using the logomaker function:

Create a standard Logo plot in Logolas, analogous to seqLogo and ggseqLogo R packages.

sequence <- c("CTATTGT","CTCTTAT","CTATTAA","CTATTTA", "CTATTAT","CTTGAAT",
              "CTTAGAT","CTATTAA","CTATTTA","CTATTAT", "CTTTTAT","CTATAGT",
              "CTATTTT","CTTATAT","CTATATT","CTCATTT", "CTTATTT","CAATAGT",
              "CATTTGA","CTCTTAT","CTATTAT","CTTTTAT", "CTATAAT","CTTAGGT",
              "CTATTGT","CTCATGT","CTATAGT", "CTCGTTA","CTAGAAT","CAATGGT")
logomaker(sequence,type = "Logo")

misc

The corresponding EDLogo plot highlights the depletion of T in the middle, not visually clear in the standard logo plot.

logomaker(sequence, type = "EDLogo")

misc

One can also apply EDLogo for amino acid motifs, marked by alphabets beyond A, C, G and T as in DNA motifs.

We create an EDLogo plot on the amino acid sequences at N-Glycosylation sites, with a user specified background bg chosen to be the median psoitional weight of an aminoa acid in the context around the glycosylation site [data from Uniprotkb].

data("N_Glycosyl_sequences")
bg <- apply(N_Glycosyl_sequences, 1, function(x) return(median(x)))
bg <- bg/sum(bg)
logomaker(N_Glycosyl_sequences, type = "EDLogo", bg=bg)

misc

EDLogo highlights the motif Asn (N) -X- Ser (S)/Thr (T) -X motif at the center where X is depleted for the amino acid Pro (P).

Logolas allows the symbols in the logo plot to be a combination of strings and charcaters or be purely strings - examples of which are shown below

For a mutation signature (mismatch type at the center with flanking bases) example (data from Shiraishi et al 2015).

data(mutation_sig)
logomaker(mutation_sig, type = "EDLogo", color_type = "per_symbol",  color_seed = 2000)

misc

EDLogo plot for the enrichment and depletion of histone marks in different parts of the genome (data from Koch et al 2007).

data(histone_marks)
logomaker(histone_marks$mat, bg = histone_marks$bgmat, type = "EDLogo")

misc

Finally, please walk through some more detailed examples in the vignette:

vignette("Logolas")

Developer notes

This was the R command used to generate the vignette PDF file from the R Markdown source:

render("Logolas.Rmd",output_format="pdf_document")

Credits

This software was developed by Kushal Dey, Dongyue Xie and Matthew Stephens at the University of Chicago. For any questions or comments, please contact Kushal Dey at [email protected].

The authors would like to acknowledge Oliver Bembom, the author of the seqLogo package which acted as an inspiration and starting point for this software. The authors also thank Peter Carbonetto, Edward Wallace and John Blischak for helpful discussions and feedback.

logolas's People

Contributors

hpages avatar kkdey avatar pcarbo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

jcastib

logolas's Issues

Convergence issue

Great tool !

However, when I use:
logomaker(A, type = "EDLogo", bg=apply(m6A,2,function(x){x/sum(x)}))

I get..
Analyzing the positional frequency matrix
color_type not provided, so switching to per_row option for
color_type
frame width not provided, taken to be 1
frame width not provided, taken to be 1
Warnmeldung:
In estimate_mixprop(data, g, prior, optmethod = optmethod, control = control, :
Optimization failed to converge. Results may be unreliable. Try increasing maxiter and rerunning.

Is there a way to change/pass this parameter ?

Default color profiles

It would be helpful to have default colour profiles in Logolas

  • for DNA, RNA, and protein per row
  • calculated by logomaker/nlogomaker if none is supplied by user, with default options

Thanks
Edward

Problem with background probabilites as matrix

Hi there,
thanks for this excellent package
I'm trying to provide a dataframe as input for the bg argument with the following call:
logomaker(selected, type = "EDLogo", bg = bg_freq)

but the std messages tells me:

using a background with equal probability for all symbols
Analyzing the positional frequency matrix
color_type not provided, so switching to per_row option for
            color_type
using a background with equal probability for all symbols
frame width not provided, taken to be 1
frame width not provided, taken to be 1

So it looks like it is not recognizing the matrix as a correct input
Tried reducing the matrix to a vector with eg
logomaker(selected, type = "EDLogo", bg = apply(bg_freq, 1, median)
and this works fine

The bg_freq matrix I'm using looks like this:

> bg_freq
             X1         X2         X3         X4
A    0.05279903 0.04980073 0.05216351 0.05247792
R    0.07329378 0.07228652 0.07226239 0.07359076
N    0.03852414 0.04015821 0.03832839 0.03770225
D    0.03353948 0.03509813 0.03223993 0.03155547
C    0.03961352 0.04219518 0.04243954 0.04012201
E    0.02266077 0.02258770 0.02070860 0.02267954
Q    0.02168435 0.02120837 0.01836090 0.02008950
G    0.06898353 0.06675281 0.07242395 0.07669331
H    0.03605946 0.03450182 0.03327166 0.03264350
I    0.04746946 0.04550153 0.05004575 0.04720432
L    0.09994603 0.09670940 0.09729298 0.09461981
K    0.02239764 0.02331004 0.02001609 0.02170547
M    0.02649304 0.02574321 0.02573282 0.02503830
F    0.05888548 0.06087385 0.06871872 0.06445573
P    0.04518813 0.04547472 0.04307440 0.04472590
S    0.09771599 0.09989207 0.09634974 0.09773208
T    0.04927112 0.05092396 0.05147100 0.04962240
W    0.02641661 0.02564366 0.02608376 0.02669080
Y    0.04525383 0.04639751 0.04625036 0.04635929
V    0.07226708 0.07094374 0.07230865 0.07268440
STOP 0.02153753 0.02399685 0.02045687 0.02160725

The selected input looks like this:

> selected
        X1     X2    X3    X4
A     4391    312 18522 36137
R     1892    448 19556   754
N    15031     69 14746  9056
D    79066      8 20538 28701
C     6862    100  5082  5329
E    20854      1 11766 30431
Q     6055      3 15775 18050
G     2804    181 11035  3275
H    25443   2350  7719 14401
I     7118   6464 17796  4061
L    20541  49420 33519 30211
K     1706     57 12112   749
M     5246   8809 10347  8940
F    27814  94952  6160  6547
P       13    231  7385  8387
S    28827    252 36469 49113
T    13302   5898 24544 24978
W     8027   8266  2746  1192
Y    30918 138029  7065 12714
V    11667   1750 34702 24573
STOP    48     25    41    26

Is there something wrong with my input or is that a bug?

Thanks for your help!

Error in using examples

Hello,

Firstly, thank you for your tool. It totally answers what I want to represent.
So, I wanted to test it. But unfortunately, I can not run the sample datasets. For example, the following command returns the error:

logomaker (sequence, type = "Logo")
Error in logomaker (sequence, type = "Logo"):
   unused argument (type = "Logo")

In addition, the sample datasets seem to be missing.

data ("seqlogo_example")
Warning message:
In data ("seqlogo_example"): dataset 'seqlogo_example' not found

I can not solve the various problems for the moment. Could you help me ?

My R session information is as follows:
Version:1.0 StartHTML:0000000107 EndHTML:0000001863 StartFragment:0000000127 EndFragment:0000001845
R version 3.4.4 (2018-03-15)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

Matrix products: default

locale:
[1] LC_COLLATE=French_France.1252 LC_CTYPE=French_France.1252
[3] LC_MONETARY=French_France.1252 LC_NUMERIC=C
[5] LC_TIME=French_France.1252

attached base packages:
[1] grid stats4 parallel stats graphics grDevices utils datasets methods
[10] base

other attached packages:
[1] Logolas_1.2.0 BiocInstaller_1.28.0 Biostrings_2.46.0 XVector_0.18.0
[5] IRanges_2.12.0 S4Vectors_0.16.0 BiocGenerics_0.24.0

loaded via a namespace (and not attached):
[1] Rcpp_0.12.16 plyr_1.8.4 gtable_0.2.0 scales_0.5.0 ggplot2_2.2.1
[6] pillar_1.2.2 zlibbioc_1.24.0 rlang_0.2.0 lazyeval_0.2.1 tools_3.4.4
[11] munsell_0.4.3 yaml_2.1.19 compiler_3.4.4 colorspace_1.3-2 tibble_1.4.2

Thanking you in advance,

Benjamin N

Bug with the separating line in EDLogo

It seems that the separating line sometimes disappears in the positive or negative axis when the other axis is very strongly represented in the logo plot

Error when installing

After running "install_github("kkdey/Logolas",build_vignettes = TRUE)", I get the following error: "Error: (converted from warning) package ‘ashr’ is not available (for R version 3.5.2)." I tried version 3.43 of R and that did not work either. What version of R should I use (I am using a Mac)?

'logo_control_default' not found

Hi there,

I am trying to create ED logo and I downloaded nucleotide sequences (shown below) from https://rdrr.io/bioc/Logolas/man/logomaker.html .

sequence <- c("CTATTGT", "CTCTTAT", "CTATTAA", "CTATTTA", "CTATTAT",
"CTTGAAT", "CTTAGAT", "CTATTAA", "CTATTTA", "CTATTAT",
"CTTTTAT", "CTATAGT", "CTATTTT", "CTTATAT", "CTATATT",
"CTCATTT", "CTTATTT", "CAATAGT", "CATTTGA", "CTCTTAT",
"CTATTAT", "CTTTTAT", "CTATAAT", "CTTAGGT",
"CTATTGT", "CTCATGT", "CTATAGT", "CTCGTTA",
"CTAGAAT", "CAATGGT")
logomaker(sequence, type = "EDlogo") however, did give me an error:
"Error in logomaker(sequence, type = "EDlogo") :
object 'logo_control_default' not found".

I try to use some sequences as logo_control and bg but, the error persists.
And, I could not find this incident mentioned online.
Can you give me a clue to such problem?

help with color_type = "per_symbol" with protein sequences

Hi,
I would like to generate an EDlogo for a protein sequence (so 20 letters in total) with custom colors. However, I am not finding a way to do it. I manage to get the right colors with the following code:
color_profile <- list("type" = "per_symbol", "col" = cols$color) # cols$color has the 20 colors I want in order
plogomaker(df[,2:7], color_profile = color_profile)
but I cannot figure out how to do this in the logomaker function, which gives me the correct formatting. I tried different things in the logo_control argument with no luck. Can you please let me know how to do this?
Thanks,
Ron

Syntaxing the logos at each position

Use three types of nomenclature

  • IUPAC type nomenclature
    -Prosite nomenclature
  • Logolas nomenclature

for depicting which symbols to map to and which symbols not to map to, for each position.

Add dash to Logolas

To move dash and all its dependencies from the kkdey/dash Github channel to kkdey/Logolas and test for the application of dash in the logo plots.

Ignoring 'N', '-', and '*' in logos

Is there a way to ignore certain characters or missing data when calculating EDLogos? Right now, any N in a DNA alignment shows up as a separate character in the Logos.

Excessive warnings produced without REBayes installed.

Hi,

when using this package without REBayes installed, using type = "EDLogo" produces the warning "Due to absence of package REBayes, switching to EM algorithm." This warning is helpful, but is produced hundreds of times upon execution. Is it possible to make this warning only display once after logomaker is run? It fills up the console otherwise.

library(Logolas)
data("seqlogo_example")
logomaker(seqlogo_example, type = "EDLogo")
#> using a background with equal probability for all symbols
#> The input is a positional weight matrix
#>                 (entries are probabilities)
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> Due to absence of package REBayes, switching to EM algorithm
#> color_type not provided, so switching to per_row option for
#>             color_type
#> using a background with equal probability for all symbols
#> frame width not provided, taken to be 1
#> frame width not provided, taken to be 1

Created on 2018-12-17 by the reprex package (v0.2.1)

Integrate package vignette?

It would be extremely helpful to integrate a vignette to your Logolas R package to teach users how to get started. How do I go from a character vector of sequences to a EDLogo? What are the key functions? You have public code to do that in https://github.com/kkdey/Logolas-pages and https://github.com/kkdey/Logolas-paper, but it is very difficult from the outside to figure out where in there to find the relevant code.

Without this, I found it too hard to get started using your clever and sensible sequence logos.

There's some great advice on writing a vignette here:
http://r-pkgs.had.co.nz/vignettes.html

Thanks!
Edward

Error installing and running Logolas

Hello,

I'm having an issue getting Logolas to install through BioManager.

I've run through the steps listed on the Github up until
install_github("kkdey/Logolas",build_vignettes = TRUE)

At that point, I get an error:

── R CMD build ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
✔ checking for file ‘/tmp/Rtmp1uNlIR/remotes4e4a2ae9aa8a/kkdey-Logolas-d000007/DESCRIPTION’ ...
─ preparing ‘Logolas’:
✔ checking DESCRIPTION meta-information ...
─ installing the package to build vignettes
E creating vignettes (11.7s)
--- re-building ‘Logolas.Rmd’ using rmarkdown
Quitting from lines 90-91 (Logolas.Rmd)
Error: processing vignette 'Logolas.Rmd' failed with diagnostics:
the condition has length > 1
--- failed re-building ‘Logolas.Rmd’

SUMMARY: processing the following file failed:
‘Logolas.Rmd’

Error: Vignette re-building failed.
Execution halted
Error: Failed to install 'Logolas' from GitHub:
! System command 'R' failed

Alternately, if I install without building vignettes it appears that Logolas installs correctly, but then fails (giving a similar error) when I run logomaker with character vector input:

Running
x <- c("NSTE","NFSW","NFSW","NFSW","NFSW","NFSW","NFSW","NSTE","NFSW","NFSW","NFSW","NFSW")
logomaker(x, type = "EDLogo")

I see:

using a background with equal probability for all symbols
Analyzing the positional frequency matrix
color_type not provided, so switching to per_row option for
color_type
Error in if (class(table) == "data.frame") { :
the condition has length > 1

Is there any suggestion for addressing this issue?

Unable to represent N-glycosylation using my data

Hi!

I tried to represent motif sequence, however, the EDplot not represent depletion amino acid letters how I expect.
Here is my data (text file):
NSTE NFSW NFSW NFSW NFSW NFSW NFSW NSTE NFSW NFSW NFSW NFSW
Then I use this line:
sequence <- c("NSTE","...")
First, represent the data with logomaker:
logomaker(sequence,type = "Logo")
This result in this plot:
1
I expect that using EDlogo give me a deplete view of my data, however when I use this line:
> logomaker(sequence, type = "EDLogo")
Result in this plot:
2
I think that this is not the correct logo that represents Enriechmente Depletion or I´m wrong? (If this is the case, please correct me).
When I plot the second Logo, there are some warning messages that I can´t figure out what means exactly in this example.
Here the messages:


using a background with equal probability for all symbols
Analyzing the positional frequency matrix
color_type not provided, so switching to per_row option for
            color_type
using a background with equal probability for all symbols
frame width not provided, taken to be 1
frame width not provided, taken to be 1
Error in grid::unit(letters$x, "native") : 
  'x' and 'units' must have length > 0
Also: Warning messages: 
In if (class (table) == "data.frame") {:
   the condition has length> 1 and only the first element will be used
2: In if (class (table)! = "Matrix") {:
   the condition has length> 1 and only the first element will be used
3: In if (class (table) == "data.frame") {:
   the condition has length> 1 and only the first element will be used
4: In if (class (table)! = "Matrix") {:
   the condition has length> 1 and only the first element will be used 

I don´t understand the error and if this error influences the plot result.

Any comment or help is welcome!

Thank!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.