# How to display on screen using Cairo.jl?

**URL:** <https://discourse.julialang.org/t/how-to-display-on-screen-using-cairo-jl/66427>\
**Category:** New to Julia\
**Tags:** question, package\
**Created:** [August 15, 2021, 7:01am UTC](https://discourse.julialang.org/t/how-to-display-on-screen-using-cairo-jl/66427 "2021-08-15T07:01:46Z")\
**Posts on this page:** 18\
**Page:** 1

<div class="post-metadata">

**Author:** ![Rratic](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rratic/32/24917_2.png) [@Rratic](https://discourse.julialang.org/u/Rratic)\
**Post date:** [August 15, 2021, 7:01am UTC](https://discourse.julialang.org/t/how-to-display-on-screen-using-cairo-jl/66427/1 "2021-08-15T07:01:47Z")

</div>

I want to show the graph on the screen (maybe a window)

I wonder which surface function I should choose and how to fill the arguments,since there’s an error every time I try.

I hope there’s an example 😀

---

<div class="post-metadata">

**Author:** ![Rratic](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rratic/32/24917_2.png) [@Rratic](https://discourse.julialang.org/u/Rratic)\
**Post date:** [August 15, 2021, 7:44am UTC](https://discourse.julialang.org/t/how-to-display-on-screen-using-cairo-jl/66427/2 "2021-08-15T07:44:22Z")

</div>

nobody?  
I’m going to ask it in the [repo](https://github.com/JuliaGraphics/Cairo.jl/issues/346).

---

<div class="post-metadata">

**Author:** ![cormullion](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cormullion/32/49131_2.png) [@cormullion](https://discourse.julialang.org/u/cormullion)\
**Post date:** [August 15, 2021, 9:46am UTC](https://discourse.julialang.org/t/how-to-display-on-screen-using-cairo-jl/66427/3 "2021-08-15T09:46:28Z")

</div>

Hi! Perhaps you could tell us a bit more about what you’re trying to do, and what you’ve done so far.

Most people make figures and graphs using Plots.jl/Makie.jl/Lightgraphs.jl, so it’s not that common (although perfectly possible) to want to do the extra work in Cairo.jl.

---

<div class="post-metadata">

**Author:** ![Rratic](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rratic/32/24917_2.png) [@Rratic](https://discourse.julialang.org/u/Rratic)\
**Post date:** [August 15, 2021, 10:03am UTC](https://discourse.julialang.org/t/how-to-display-on-screen-using-cairo-jl/66427/4 "2021-08-15T10:03:08Z")

</div>

well, I want to draw sets of points (from images and maybe do operations before showing),but using GLFW is too complicated

---

<div class="post-metadata">

**Author:** ![cormullion](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cormullion/32/49131_2.png) [@cormullion](https://discourse.julialang.org/u/cormullion)\
**Post date:** [August 15, 2021, 10:04am UTC](https://discourse.julialang.org/t/how-to-display-on-screen-using-cairo-jl/66427/5 "2021-08-15T10:04:45Z")

</div>

Probably start with Makie.jl - you can see some of the possibilities on this amazing page: [https://lazarusa.github.io/BeautifulMakie/](https://lazarusa.github.io/BeautifulMakie/)

---

<div class="post-metadata">

**Author:** ![Rratic](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rratic/32/24917_2.png) [@Rratic](https://discourse.julialang.org/u/Rratic)\
**Post date:** [August 15, 2021, 10:07am UTC](https://discourse.julialang.org/t/how-to-display-on-screen-using-cairo-jl/66427/6 "2021-08-15T10:07:49Z")

</div>

> [@cormullion](#):
>

but I don’t want x,y-axis

---

<div class="post-metadata">

**Author:** ![cormullion](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cormullion/32/49131_2.png) [@cormullion](https://discourse.julialang.org/u/cormullion)\
**Post date:** [August 15, 2021, 10:16am UTC](https://discourse.julialang.org/t/how-to-display-on-screen-using-cairo-jl/66427/7 "2021-08-15T10:16:06Z")

</div>

You can almost certainly choose to not show them. I haven’t read the documentation, but you probably will! 😂

---

<div class="post-metadata">

**Author:** ![Rratic](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rratic/32/24917_2.png) [@Rratic](https://discourse.julialang.org/u/Rratic)\
**Post date:** [August 15, 2021, 10:20am UTC](https://discourse.julialang.org/t/how-to-display-on-screen-using-cairo-jl/66427/8 "2021-08-15T10:20:21Z")

</div>

But I need a lightweight one, Makie is designed to `plot`,so it contains too much things I don’t need, making it slow to load.

I read the docs and haven’t seen an option on axises.

---

<div class="post-metadata">

**Author:** ![cormullion](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cormullion/32/49131_2.png) [@cormullion](https://discourse.julialang.org/u/cormullion)\
**Post date:** [August 15, 2021, 10:28am UTC](https://discourse.julialang.org/t/how-to-display-on-screen-using-cairo-jl/66427/9 "2021-08-15T10:28:51Z")

</div>

OK, so Gtk.jl may be the best way to draw graphics into a window.

---

<div class="post-metadata">

**Author:** ![ederag](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ederag/32/4106_2.png) [@ederag](https://discourse.julialang.org/u/ederag)\
**Post date:** [August 15, 2021, 2:44pm UTC](https://discourse.julialang.org/t/how-to-display-on-screen-using-cairo-jl/66427/10 "2021-08-15T14:44:07Z")

</div>

> [@Rratic](#):
>
> but I don’t want x,y-axis

For other searching how to do that in Makie,  
`hidespines!` and `hidedecorations!` are described [here](http://makie.juliaplots.org/stable/makielayout/axis.html#Hiding-Axis-spines-and-decorations).

---

<div class="post-metadata">

**Author:** ![Rratic](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rratic/32/24917_2.png) [@Rratic](https://discourse.julialang.org/u/Rratic)\
**Post date:** [August 15, 2021, 3:46pm UTC](https://discourse.julialang.org/t/how-to-display-on-screen-using-cairo-jl/66427/11 "2021-08-15T15:46:23Z")

</div>

but there’s still a rectangle

---

<div class="post-metadata">

**Author:** ![ederag](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ederag/32/4106_2.png) [@ederag](https://discourse.julialang.org/u/ederag)\
**Post date:** [August 15, 2021, 8:03pm UTC](https://discourse.julialang.org/t/how-to-display-on-screen-using-cairo-jl/66427/12 "2021-08-15T20:03:02Z")

</div>

> but there’s still a rectangle

Not here (`CairoMakie v0.6.2`),

 ![image](https://global.discourse-cdn.com/julialang/original/3X/1/c/1cfada144a536996d5543f236e1cc09059f54d84.png)  
Generated in a Pluto.jl notebook with two cells:

`using CairoMakie`

```julia
let
	fig = Figure(backgroundcolor=RGBf0(0.95, 0.95, 0.95), resolution=(800, 200))
	ax = Axis(fig[1, 1])
	xs = [0.0, 1.0]
	ys = [0.0, 1.0]
	ar = lines!(ax, xs, ys)
	hidespines!(ax)
	hidedecorations!(ax)
	fig
end

```

---

<div class="post-metadata">

**Author:** ![jules](https://avatars.discourse-cdn.com/v4/letter/j/41988e/32.png) [@jules](https://discourse.julialang.org/u/jules)\
**Post date:** [August 15, 2021, 9:16pm UTC](https://discourse.julialang.org/t/how-to-display-on-screen-using-cairo-jl/66427/13 "2021-08-15T21:16:42Z")

</div>

In Makie, you can also generate a raw Scene and just use that as a canvas, no Axis needed. But axes are still nice for auto-scaling to your data if you don’t want to draw in pixel coordinates.

```julia
s = Scene(camera = campixel!, show_axis = false)
lines!(s, ...

s

```

---

<div class="post-metadata">

**Author:** ![tomerarnon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tomerarnon/32/3170_2.png) [@tomerarnon](https://discourse.julialang.org/u/tomerarnon)\
**Post date:** [August 16, 2021, 1:20am UTC](https://discourse.julialang.org/t/how-to-display-on-screen-using-cairo-jl/66427/14 "2021-08-16T01:20:54Z")

</div>

How about `Luxor`?

```julia
using Luxor
width = height = 100
Drawing(width, height)
background("white")
sethue("black")
circle(Point(width/2, height/2), 10, :fill)
finish()
preview()

```

---

<div class="post-metadata">

**Author:** ![Rratic](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rratic/32/24917_2.png) [@Rratic](https://discourse.julialang.org/u/Rratic)\
**Post date:** [August 16, 2021, 3:35am UTC](https://discourse.julialang.org/t/how-to-display-on-screen-using-cairo-jl/66427/15 "2021-08-16T03:35:40Z")

</div>

but

> Luxor is designed primarily for drawing static pictures.

that’s not what I want

---

<div class="post-metadata">

**Author:** ![tomerarnon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tomerarnon/32/3170_2.png) [@tomerarnon](https://discourse.julialang.org/u/tomerarnon)\
**Post date:** [August 16, 2021, 4:51am UTC](https://discourse.julialang.org/t/how-to-display-on-screen-using-cairo-jl/66427/16 "2021-08-16T04:51:47Z")

</div>

Check out the `animate` function and the `@play` macro. I’ve been playing around with both recently and enjoying them a lot. I agree static is boring!

---

<div class="post-metadata">

**Author:** ![Rratic](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rratic/32/24917_2.png) [@Rratic](https://discourse.julialang.org/u/Rratic)\
**Post date:** [August 16, 2021, 5:16am UTC](https://discourse.julialang.org/t/how-to-display-on-screen-using-cairo-jl/66427/17 "2021-08-16T05:16:37Z")

</div>

So what if (similar) I’m making a 2D game?  
After all,I’m going to use [GtkReactive](https://juliagizmos.github.io/GtkReactive.jl/stable/index.html)

---

<div class="post-metadata">

**Author:** ![cormullion](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cormullion/32/49131_2.png) [@cormullion](https://discourse.julialang.org/u/cormullion)\
**Post date:** [August 16, 2021, 8:14am UTC](https://discourse.julialang.org/t/how-to-display-on-screen-using-cairo-jl/66427/18 "2021-08-16T08:14:25Z")

</div>

Note that:

> new projects are encouraged to consider [GtkObservables](https://github.com/JuliaGizmos/GtkObservables.jl) instead.
