Teach the object oriented matplotlib API instead of the procedural one. - #1

Open
akreuzkamp wants to merge 2 commits into
nilsvu:masterfrom
akreuzkamp:matplotlib-ooo-api
Open

Teach the object oriented matplotlib API instead of the procedural one.#1
akreuzkamp wants to merge 2 commits into
nilsvu:masterfrom
akreuzkamp:matplotlib-ooo-api

Conversation

@akreuzkamp

Copy link
Copy Markdown

So far in course "202 - Plots mit Matplotlib" the procedural API of matplotlib was taught.
For reasons I recently stated in the feedback form, I think the object oriented API is superior and should be taught from the beginning.
After all, the object oriented API is unavoidable, even this course already used it for the multiple plots section, so it seems logical to teach it from the beginning, given that it only adds 2 lines of boilerplate code per figure and nothing particularly complex for the students to learn.

This pr is a proposal, how the course could look like, teaching the object oriented matplotlib API.

So far in course "202 - Plots mit Matplotlib" the procedural API of
matplotlib was taught. This commit changes the course, to teach the
object oriented API instead, which only adds additional complexity in
the form of 2 lines of boilerplate code per figure, but adds a lot of
flexibility. After all, the ooo API is unavoidable, even this course
already used it for the multiple plots section, so it seems logical to
teach it from the beginning.
After course 202 was changed to teach the object oriented API of
matplotlib instead of the procedural one, this commit changes all
examples in 203 and 302 to use the object oriented API as well.
@nilsvu

nilsvu commented Dec 11, 2016

Copy link
Copy Markdown
Owner

Hallo @akreuzkamp, danke für deinen Vorschlag.

Ich halte die funktionale API nicht für ganz überflüssig, man kann damit durchaus schneller etwas plotten, ohne sich Gedanken über figures und axes zu machen. Daher denke ich, dass wir schon mit plt.plot beginnen sollten.

  • Im Abschnitt mit mehreren Plots habe ich noch einige Erklärungen hinzugefügt und gebe einen Hinweis zur Arbeitsweise mit Abbildungen und Achsen und der objektorientierten API.
  • Generell ziehe ich Code vor, der präzise ist und damit nur Zeilen enthält, die beim Lesen zum Verständnis beitragen. Wenn es dazu nicht notwendig ist, eine figure oder axis zu erstellen, lasse ich das lieber Matplotlib selbst erledigen.
  • In welcher Situation findest du es sinnvoller, die objektorientierte API zu verwenden? Schau dir mal an, wie ich die Subplots jetzt im Beispiel erstelle, meinst du objektorientiert wär's tatsächlich besser?

@akreuzkamp

Copy link
Copy Markdown
Author

Ok. Was hältst du davon, die objekt-orientierte API dann ab dem Moment zu benutzen, ab dem die Plots über einen Funktionsaufruf hinausgehen? Sprich ab dem Abschnitt "Plots gestalten", wenn es dann darum geht Axen zu beschriften, Skalen zu verändern, etc.

Dass die funktionale API für sehr einfache, schnelle Plots praktischer (und dann auch "schöner") ist, kann ich nicht abstreiten. :)

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@akreuzkamp@nilsvu
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Teach the object oriented matplotlib API instead of the procedural one. - #1

Open
akreuzkamp wants to merge 2 commits into
nilsvu:masterfrom
akreuzkamp:matplotlib-ooo-api
Open

Teach the object oriented matplotlib API instead of the procedural one.#1
akreuzkamp wants to merge 2 commits into
nilsvu:masterfrom
akreuzkamp:matplotlib-ooo-api

Conversation

@akreuzkamp

Copy link
Copy Markdown

So far in course "202 - Plots mit Matplotlib" the procedural API of matplotlib was taught.
For reasons I recently stated in the feedback form, I think the object oriented API is superior and should be taught from the beginning.
After all, the object oriented API is unavoidable, even this course already used it for the multiple plots section, so it seems logical to teach it from the beginning, given that it only adds 2 lines of boilerplate code per figure and nothing particularly complex for the students to learn.

This pr is a proposal, how the course could look like, teaching the object oriented matplotlib API.

So far in course "202 - Plots mit Matplotlib" the procedural API of
matplotlib was taught. This commit changes the course, to teach the
object oriented API instead, which only adds additional complexity in
the form of 2 lines of boilerplate code per figure, but adds a lot of
flexibility. After all, the ooo API is unavoidable, even this course
already used it for the multiple plots section, so it seems logical to
teach it from the beginning.
After course 202 was changed to teach the object oriented API of
matplotlib instead of the procedural one, this commit changes all
examples in 203 and 302 to use the object oriented API as well.
@nilsvu

nilsvu commented Dec 11, 2016

Copy link
Copy Markdown
Owner

Hallo @akreuzkamp, danke für deinen Vorschlag.

Ich halte die funktionale API nicht für ganz überflüssig, man kann damit durchaus schneller etwas plotten, ohne sich Gedanken über figures und axes zu machen. Daher denke ich, dass wir schon mit plt.plot beginnen sollten.

  • Im Abschnitt mit mehreren Plots habe ich noch einige Erklärungen hinzugefügt und gebe einen Hinweis zur Arbeitsweise mit Abbildungen und Achsen und der objektorientierten API.
  • Generell ziehe ich Code vor, der präzise ist und damit nur Zeilen enthält, die beim Lesen zum Verständnis beitragen. Wenn es dazu nicht notwendig ist, eine figure oder axis zu erstellen, lasse ich das lieber Matplotlib selbst erledigen.
  • In welcher Situation findest du es sinnvoller, die objektorientierte API zu verwenden? Schau dir mal an, wie ich die Subplots jetzt im Beispiel erstelle, meinst du objektorientiert wär's tatsächlich besser?

@akreuzkamp

Copy link
Copy Markdown
Author

Ok. Was hältst du davon, die objekt-orientierte API dann ab dem Moment zu benutzen, ab dem die Plots über einen Funktionsaufruf hinausgehen? Sprich ab dem Abschnitt "Plots gestalten", wenn es dann darum geht Axen zu beschriften, Skalen zu verändern, etc.

Dass die funktionale API für sehr einfache, schnelle Plots praktischer (und dann auch "schöner") ist, kann ich nicht abstreiten. :)

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@akreuzkamp@nilsvu
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Teach the object oriented matplotlib API instead of the procedural one. - #1

Open
akreuzkamp wants to merge 2 commits into
nilsvu:masterfrom
akreuzkamp:matplotlib-ooo-api
Open

Teach the object oriented matplotlib API instead of the procedural one.#1
akreuzkamp wants to merge 2 commits into
nilsvu:masterfrom
akreuzkamp:matplotlib-ooo-api

Conversation

@akreuzkamp

Copy link
Copy Markdown

So far in course "202 - Plots mit Matplotlib" the procedural API of matplotlib was taught.
For reasons I recently stated in the feedback form, I think the object oriented API is superior and should be taught from the beginning.
After all, the object oriented API is unavoidable, even this course already used it for the multiple plots section, so it seems logical to teach it from the beginning, given that it only adds 2 lines of boilerplate code per figure and nothing particularly complex for the students to learn.

This pr is a proposal, how the course could look like, teaching the object oriented matplotlib API.

So far in course "202 - Plots mit Matplotlib" the procedural API of
matplotlib was taught. This commit changes the course, to teach the
object oriented API instead, which only adds additional complexity in
the form of 2 lines of boilerplate code per figure, but adds a lot of
flexibility. After all, the ooo API is unavoidable, even this course
already used it for the multiple plots section, so it seems logical to
teach it from the beginning.
After course 202 was changed to teach the object oriented API of
matplotlib instead of the procedural one, this commit changes all
examples in 203 and 302 to use the object oriented API as well.
@nilsvu

nilsvu commented Dec 11, 2016

Copy link
Copy Markdown
Owner

Hallo @akreuzkamp, danke für deinen Vorschlag.

Ich halte die funktionale API nicht für ganz überflüssig, man kann damit durchaus schneller etwas plotten, ohne sich Gedanken über figures und axes zu machen. Daher denke ich, dass wir schon mit plt.plot beginnen sollten.

  • Im Abschnitt mit mehreren Plots habe ich noch einige Erklärungen hinzugefügt und gebe einen Hinweis zur Arbeitsweise mit Abbildungen und Achsen und der objektorientierten API.
  • Generell ziehe ich Code vor, der präzise ist und damit nur Zeilen enthält, die beim Lesen zum Verständnis beitragen. Wenn es dazu nicht notwendig ist, eine figure oder axis zu erstellen, lasse ich das lieber Matplotlib selbst erledigen.
  • In welcher Situation findest du es sinnvoller, die objektorientierte API zu verwenden? Schau dir mal an, wie ich die Subplots jetzt im Beispiel erstelle, meinst du objektorientiert wär's tatsächlich besser?

@akreuzkamp

Copy link
Copy Markdown
Author

Ok. Was hältst du davon, die objekt-orientierte API dann ab dem Moment zu benutzen, ab dem die Plots über einen Funktionsaufruf hinausgehen? Sprich ab dem Abschnitt "Plots gestalten", wenn es dann darum geht Axen zu beschriften, Skalen zu verändern, etc.

Dass die funktionale API für sehr einfache, schnelle Plots praktischer (und dann auch "schöner") ist, kann ich nicht abstreiten. :)

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@akreuzkamp@nilsvu
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Teach the object oriented matplotlib API instead of the procedural one. - #1

Open
akreuzkamp wants to merge 2 commits into
nilsvu:masterfrom
akreuzkamp:matplotlib-ooo-api
Open

Teach the object oriented matplotlib API instead of the procedural one.#1
akreuzkamp wants to merge 2 commits into
nilsvu:masterfrom
akreuzkamp:matplotlib-ooo-api

Conversation

@akreuzkamp

Copy link
Copy Markdown

So far in course "202 - Plots mit Matplotlib" the procedural API of matplotlib was taught.
For reasons I recently stated in the feedback form, I think the object oriented API is superior and should be taught from the beginning.
After all, the object oriented API is unavoidable, even this course already used it for the multiple plots section, so it seems logical to teach it from the beginning, given that it only adds 2 lines of boilerplate code per figure and nothing particularly complex for the students to learn.

This pr is a proposal, how the course could look like, teaching the object oriented matplotlib API.

So far in course "202 - Plots mit Matplotlib" the procedural API of
matplotlib was taught. This commit changes the course, to teach the
object oriented API instead, which only adds additional complexity in
the form of 2 lines of boilerplate code per figure, but adds a lot of
flexibility. After all, the ooo API is unavoidable, even this course
already used it for the multiple plots section, so it seems logical to
teach it from the beginning.
After course 202 was changed to teach the object oriented API of
matplotlib instead of the procedural one, this commit changes all
examples in 203 and 302 to use the object oriented API as well.
@nilsvu

nilsvu commented Dec 11, 2016

Copy link
Copy Markdown
Owner

Hallo @akreuzkamp, danke für deinen Vorschlag.

Ich halte die funktionale API nicht für ganz überflüssig, man kann damit durchaus schneller etwas plotten, ohne sich Gedanken über figures und axes zu machen. Daher denke ich, dass wir schon mit plt.plot beginnen sollten.

  • Im Abschnitt mit mehreren Plots habe ich noch einige Erklärungen hinzugefügt und gebe einen Hinweis zur Arbeitsweise mit Abbildungen und Achsen und der objektorientierten API.
  • Generell ziehe ich Code vor, der präzise ist und damit nur Zeilen enthält, die beim Lesen zum Verständnis beitragen. Wenn es dazu nicht notwendig ist, eine figure oder axis zu erstellen, lasse ich das lieber Matplotlib selbst erledigen.
  • In welcher Situation findest du es sinnvoller, die objektorientierte API zu verwenden? Schau dir mal an, wie ich die Subplots jetzt im Beispiel erstelle, meinst du objektorientiert wär's tatsächlich besser?

@akreuzkamp

Copy link
Copy Markdown
Author

Ok. Was hältst du davon, die objekt-orientierte API dann ab dem Moment zu benutzen, ab dem die Plots über einen Funktionsaufruf hinausgehen? Sprich ab dem Abschnitt "Plots gestalten", wenn es dann darum geht Axen zu beschriften, Skalen zu verändern, etc.

Dass die funktionale API für sehr einfache, schnelle Plots praktischer (und dann auch "schöner") ist, kann ich nicht abstreiten. :)

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@akreuzkamp@nilsvu
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Teach the object oriented matplotlib API instead of the procedural one. - #1

Open
akreuzkamp wants to merge 2 commits into
nilsvu:masterfrom
akreuzkamp:matplotlib-ooo-api
Open

Teach the object oriented matplotlib API instead of the procedural one.#1
akreuzkamp wants to merge 2 commits into
nilsvu:masterfrom
akreuzkamp:matplotlib-ooo-api

Conversation

@akreuzkamp

Copy link
Copy Markdown

So far in course "202 - Plots mit Matplotlib" the procedural API of matplotlib was taught.
For reasons I recently stated in the feedback form, I think the object oriented API is superior and should be taught from the beginning.
After all, the object oriented API is unavoidable, even this course already used it for the multiple plots section, so it seems logical to teach it from the beginning, given that it only adds 2 lines of boilerplate code per figure and nothing particularly complex for the students to learn.

This pr is a proposal, how the course could look like, teaching the object oriented matplotlib API.

So far in course "202 - Plots mit Matplotlib" the procedural API of
matplotlib was taught. This commit changes the course, to teach the
object oriented API instead, which only adds additional complexity in
the form of 2 lines of boilerplate code per figure, but adds a lot of
flexibility. After all, the ooo API is unavoidable, even this course
already used it for the multiple plots section, so it seems logical to
teach it from the beginning.
After course 202 was changed to teach the object oriented API of
matplotlib instead of the procedural one, this commit changes all
examples in 203 and 302 to use the object oriented API as well.
@nilsvu

nilsvu commented Dec 11, 2016

Copy link
Copy Markdown
Owner

Hallo @akreuzkamp, danke für deinen Vorschlag.

Ich halte die funktionale API nicht für ganz überflüssig, man kann damit durchaus schneller etwas plotten, ohne sich Gedanken über figures und axes zu machen. Daher denke ich, dass wir schon mit plt.plot beginnen sollten.

  • Im Abschnitt mit mehreren Plots habe ich noch einige Erklärungen hinzugefügt und gebe einen Hinweis zur Arbeitsweise mit Abbildungen und Achsen und der objektorientierten API.
  • Generell ziehe ich Code vor, der präzise ist und damit nur Zeilen enthält, die beim Lesen zum Verständnis beitragen. Wenn es dazu nicht notwendig ist, eine figure oder axis zu erstellen, lasse ich das lieber Matplotlib selbst erledigen.
  • In welcher Situation findest du es sinnvoller, die objektorientierte API zu verwenden? Schau dir mal an, wie ich die Subplots jetzt im Beispiel erstelle, meinst du objektorientiert wär's tatsächlich besser?

@akreuzkamp

Copy link
Copy Markdown
Author

Ok. Was hältst du davon, die objekt-orientierte API dann ab dem Moment zu benutzen, ab dem die Plots über einen Funktionsaufruf hinausgehen? Sprich ab dem Abschnitt "Plots gestalten", wenn es dann darum geht Axen zu beschriften, Skalen zu verändern, etc.

Dass die funktionale API für sehr einfache, schnelle Plots praktischer (und dann auch "schöner") ist, kann ich nicht abstreiten. :)

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@akreuzkamp@nilsvu
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Teach the object oriented matplotlib API instead of the procedural one. - #1

Open
akreuzkamp wants to merge 2 commits into
nilsvu:masterfrom
akreuzkamp:matplotlib-ooo-api
Open

Teach the object oriented matplotlib API instead of the procedural one.#1
akreuzkamp wants to merge 2 commits into
nilsvu:masterfrom
akreuzkamp:matplotlib-ooo-api

Conversation

@akreuzkamp

Copy link
Copy Markdown

So far in course "202 - Plots mit Matplotlib" the procedural API of matplotlib was taught.
For reasons I recently stated in the feedback form, I think the object oriented API is superior and should be taught from the beginning.
After all, the object oriented API is unavoidable, even this course already used it for the multiple plots section, so it seems logical to teach it from the beginning, given that it only adds 2 lines of boilerplate code per figure and nothing particularly complex for the students to learn.

This pr is a proposal, how the course could look like, teaching the object oriented matplotlib API.

So far in course "202 - Plots mit Matplotlib" the procedural API of
matplotlib was taught. This commit changes the course, to teach the
object oriented API instead, which only adds additional complexity in
the form of 2 lines of boilerplate code per figure, but adds a lot of
flexibility. After all, the ooo API is unavoidable, even this course
already used it for the multiple plots section, so it seems logical to
teach it from the beginning.
After course 202 was changed to teach the object oriented API of
matplotlib instead of the procedural one, this commit changes all
examples in 203 and 302 to use the object oriented API as well.
@nilsvu

nilsvu commented Dec 11, 2016

Copy link
Copy Markdown
Owner

Hallo @akreuzkamp, danke für deinen Vorschlag.

Ich halte die funktionale API nicht für ganz überflüssig, man kann damit durchaus schneller etwas plotten, ohne sich Gedanken über figures und axes zu machen. Daher denke ich, dass wir schon mit plt.plot beginnen sollten.

  • Im Abschnitt mit mehreren Plots habe ich noch einige Erklärungen hinzugefügt und gebe einen Hinweis zur Arbeitsweise mit Abbildungen und Achsen und der objektorientierten API.
  • Generell ziehe ich Code vor, der präzise ist und damit nur Zeilen enthält, die beim Lesen zum Verständnis beitragen. Wenn es dazu nicht notwendig ist, eine figure oder axis zu erstellen, lasse ich das lieber Matplotlib selbst erledigen.
  • In welcher Situation findest du es sinnvoller, die objektorientierte API zu verwenden? Schau dir mal an, wie ich die Subplots jetzt im Beispiel erstelle, meinst du objektorientiert wär's tatsächlich besser?

@akreuzkamp

Copy link
Copy Markdown
Author

Ok. Was hältst du davon, die objekt-orientierte API dann ab dem Moment zu benutzen, ab dem die Plots über einen Funktionsaufruf hinausgehen? Sprich ab dem Abschnitt "Plots gestalten", wenn es dann darum geht Axen zu beschriften, Skalen zu verändern, etc.

Dass die funktionale API für sehr einfache, schnelle Plots praktischer (und dann auch "schöner") ist, kann ich nicht abstreiten. :)

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@akreuzkamp@nilsvu
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Teach the object oriented matplotlib API instead of the procedural one. - #1

Open
akreuzkamp wants to merge 2 commits into
nilsvu:masterfrom
akreuzkamp:matplotlib-ooo-api
Open

Teach the object oriented matplotlib API instead of the procedural one.#1
akreuzkamp wants to merge 2 commits into
nilsvu:masterfrom
akreuzkamp:matplotlib-ooo-api

Conversation

@akreuzkamp

Copy link
Copy Markdown

So far in course "202 - Plots mit Matplotlib" the procedural API of matplotlib was taught.
For reasons I recently stated in the feedback form, I think the object oriented API is superior and should be taught from the beginning.
After all, the object oriented API is unavoidable, even this course already used it for the multiple plots section, so it seems logical to teach it from the beginning, given that it only adds 2 lines of boilerplate code per figure and nothing particularly complex for the students to learn.

This pr is a proposal, how the course could look like, teaching the object oriented matplotlib API.

So far in course "202 - Plots mit Matplotlib" the procedural API of
matplotlib was taught. This commit changes the course, to teach the
object oriented API instead, which only adds additional complexity in
the form of 2 lines of boilerplate code per figure, but adds a lot of
flexibility. After all, the ooo API is unavoidable, even this course
already used it for the multiple plots section, so it seems logical to
teach it from the beginning.
After course 202 was changed to teach the object oriented API of
matplotlib instead of the procedural one, this commit changes all
examples in 203 and 302 to use the object oriented API as well.
@nilsvu

nilsvu commented Dec 11, 2016

Copy link
Copy Markdown
Owner

Hallo @akreuzkamp, danke für deinen Vorschlag.

Ich halte die funktionale API nicht für ganz überflüssig, man kann damit durchaus schneller etwas plotten, ohne sich Gedanken über figures und axes zu machen. Daher denke ich, dass wir schon mit plt.plot beginnen sollten.

  • Im Abschnitt mit mehreren Plots habe ich noch einige Erklärungen hinzugefügt und gebe einen Hinweis zur Arbeitsweise mit Abbildungen und Achsen und der objektorientierten API.
  • Generell ziehe ich Code vor, der präzise ist und damit nur Zeilen enthält, die beim Lesen zum Verständnis beitragen. Wenn es dazu nicht notwendig ist, eine figure oder axis zu erstellen, lasse ich das lieber Matplotlib selbst erledigen.
  • In welcher Situation findest du es sinnvoller, die objektorientierte API zu verwenden? Schau dir mal an, wie ich die Subplots jetzt im Beispiel erstelle, meinst du objektorientiert wär's tatsächlich besser?

@akreuzkamp

Copy link
Copy Markdown
Author

Ok. Was hältst du davon, die objekt-orientierte API dann ab dem Moment zu benutzen, ab dem die Plots über einen Funktionsaufruf hinausgehen? Sprich ab dem Abschnitt "Plots gestalten", wenn es dann darum geht Axen zu beschriften, Skalen zu verändern, etc.

Dass die funktionale API für sehr einfache, schnelle Plots praktischer (und dann auch "schöner") ist, kann ich nicht abstreiten. :)

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@akreuzkamp@nilsvu
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Teach the object oriented matplotlib API instead of the procedural one. - #1

Open
akreuzkamp wants to merge 2 commits into
nilsvu:masterfrom
akreuzkamp:matplotlib-ooo-api
Open

Teach the object oriented matplotlib API instead of the procedural one.#1
akreuzkamp wants to merge 2 commits into
nilsvu:masterfrom
akreuzkamp:matplotlib-ooo-api

Conversation

@akreuzkamp

Copy link
Copy Markdown

So far in course "202 - Plots mit Matplotlib" the procedural API of matplotlib was taught.
For reasons I recently stated in the feedback form, I think the object oriented API is superior and should be taught from the beginning.
After all, the object oriented API is unavoidable, even this course already used it for the multiple plots section, so it seems logical to teach it from the beginning, given that it only adds 2 lines of boilerplate code per figure and nothing particularly complex for the students to learn.

This pr is a proposal, how the course could look like, teaching the object oriented matplotlib API.

So far in course "202 - Plots mit Matplotlib" the procedural API of
matplotlib was taught. This commit changes the course, to teach the
object oriented API instead, which only adds additional complexity in
the form of 2 lines of boilerplate code per figure, but adds a lot of
flexibility. After all, the ooo API is unavoidable, even this course
already used it for the multiple plots section, so it seems logical to
teach it from the beginning.
After course 202 was changed to teach the object oriented API of
matplotlib instead of the procedural one, this commit changes all
examples in 203 and 302 to use the object oriented API as well.
@nilsvu

nilsvu commented Dec 11, 2016

Copy link
Copy Markdown
Owner

Hallo @akreuzkamp, danke für deinen Vorschlag.

Ich halte die funktionale API nicht für ganz überflüssig, man kann damit durchaus schneller etwas plotten, ohne sich Gedanken über figures und axes zu machen. Daher denke ich, dass wir schon mit plt.plot beginnen sollten.

  • Im Abschnitt mit mehreren Plots habe ich noch einige Erklärungen hinzugefügt und gebe einen Hinweis zur Arbeitsweise mit Abbildungen und Achsen und der objektorientierten API.
  • Generell ziehe ich Code vor, der präzise ist und damit nur Zeilen enthält, die beim Lesen zum Verständnis beitragen. Wenn es dazu nicht notwendig ist, eine figure oder axis zu erstellen, lasse ich das lieber Matplotlib selbst erledigen.
  • In welcher Situation findest du es sinnvoller, die objektorientierte API zu verwenden? Schau dir mal an, wie ich die Subplots jetzt im Beispiel erstelle, meinst du objektorientiert wär's tatsächlich besser?

@akreuzkamp

Copy link
Copy Markdown
Author

Ok. Was hältst du davon, die objekt-orientierte API dann ab dem Moment zu benutzen, ab dem die Plots über einen Funktionsaufruf hinausgehen? Sprich ab dem Abschnitt "Plots gestalten", wenn es dann darum geht Axen zu beschriften, Skalen zu verändern, etc.

Dass die funktionale API für sehr einfache, schnelle Plots praktischer (und dann auch "schöner") ist, kann ich nicht abstreiten. :)

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@akreuzkamp@nilsvu